// 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: c_compiler -c %s -I "common" -o %t2.o
// RUN: linker -o %t1%exeext  %t1.o %t2.o
// RUN: runtool %t1%exeext | checker "TEST PASSED"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"

struct  BFs8s_BFu8ll_BFu8c_BFu8ll  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned char v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8c_BFu8ll) C1{ Fs:8 FL:8 Fc:8 FL:8}



static void Test_BFs8s_BFu8ll_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8c_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8c_BFu8ll, BFs8s_BFu8ll_BFu8c_BFu8ll)
//============================================================================


struct  BFs8s_BFu8ll_BFu8c_BFu8s  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned char v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8c_BFu8s) C1{ Fs:8 FL:8 Fc:8 Fs:8}



static void Test_BFs8s_BFu8ll_BFu8c_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8c_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8c_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8c_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8c_BFu8s, BFs8s_BFu8ll_BFu8c_BFu8s)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i) C1{ Fs:8 FL:8 Fi:8}



static void Test_BFs8s_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i, BFs8s_BFu8ll_BFu8i)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i_BFs8c  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i_BFs8c) C1{ Fs:8 FL:8 Fi:8 Fc:8}



static void Test_BFs8s_BFu8ll_BFu8i_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i_BFs8c, BFs8s_BFu8ll_BFu8i_BFs8c)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i_BFs8i  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i_BFs8i) C1{ Fs:8 FL:8 Fi:8 Fi:8}



static void Test_BFs8s_BFu8ll_BFu8i_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i_BFs8i, BFs8s_BFu8ll_BFu8i_BFs8i)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i_BFs8ll  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i_BFs8ll) C1{ Fs:8 FL:8 Fi:8 FL:8}



static void Test_BFs8s_BFu8ll_BFu8i_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i_BFs8ll, BFs8s_BFu8ll_BFu8i_BFs8ll)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i_BFs8s  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i_BFs8s) C1{ Fs:8 FL:8 Fi:8 Fs:8}



static void Test_BFs8s_BFu8ll_BFu8i_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i_BFs8s, BFs8s_BFu8ll_BFu8i_BFs8s)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i_BFu8c  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i_BFu8c) C1{ Fs:8 FL:8 Fi:8 Fc:8}



static void Test_BFs8s_BFu8ll_BFu8i_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i_BFu8c, BFs8s_BFu8ll_BFu8i_BFu8c)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i_BFu8i  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i_BFu8i) C1{ Fs:8 FL:8 Fi:8 Fi:8}



static void Test_BFs8s_BFu8ll_BFu8i_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i_BFu8i, BFs8s_BFu8ll_BFu8i_BFu8i)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i_BFu8ll  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i_BFu8ll) C1{ Fs:8 FL:8 Fi:8 FL:8}



static void Test_BFs8s_BFu8ll_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i_BFu8ll, BFs8s_BFu8ll_BFu8i_BFu8ll)
//============================================================================


struct  BFs8s_BFu8ll_BFu8i_BFu8s  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned int v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8i_BFu8s) C1{ Fs:8 FL:8 Fi:8 Fs:8}



static void Test_BFs8s_BFu8ll_BFu8i_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8i_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8i_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8i_BFu8s, BFs8s_BFu8ll_BFu8i_BFu8s)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll) C1{ Fs:8 FL:8 FL:8}



static void Test_BFs8s_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll, BFs8s_BFu8ll_BFu8ll)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll_BFs8c  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll_BFs8c) C1{ Fs:8 FL:8 FL:8 Fc:8}



static void Test_BFs8s_BFu8ll_BFu8ll_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll_BFs8c, BFs8s_BFu8ll_BFu8ll_BFs8c)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll_BFs8i  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll_BFs8i) C1{ Fs:8 FL:8 FL:8 Fi:8}



static void Test_BFs8s_BFu8ll_BFu8ll_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll_BFs8i, BFs8s_BFu8ll_BFu8ll_BFs8i)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll_BFs8ll  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll_BFs8ll) C1{ Fs:8 FL:8 FL:8 FL:8}



static void Test_BFs8s_BFu8ll_BFu8ll_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll_BFs8ll, BFs8s_BFu8ll_BFu8ll_BFs8ll)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll_BFs8s  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll_BFs8s) C1{ Fs:8 FL:8 FL:8 Fs:8}



static void Test_BFs8s_BFu8ll_BFu8ll_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll_BFs8s, BFs8s_BFu8ll_BFu8ll_BFs8s)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll_BFu8c  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll_BFu8c) C1{ Fs:8 FL:8 FL:8 Fc:8}



static void Test_BFs8s_BFu8ll_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll_BFu8c, BFs8s_BFu8ll_BFu8ll_BFu8c)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll_BFu8i  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll_BFu8i) C1{ Fs:8 FL:8 FL:8 Fi:8}



static void Test_BFs8s_BFu8ll_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll_BFu8i, BFs8s_BFu8ll_BFu8ll_BFu8i)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll_BFu8ll  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll_BFu8ll) C1{ Fs:8 FL:8 FL:8 FL:8}



static void Test_BFs8s_BFu8ll_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll_BFu8ll, BFs8s_BFu8ll_BFu8ll_BFu8ll)
//============================================================================


struct  BFs8s_BFu8ll_BFu8ll_BFu8s  {
  signed short v1:8;
  __tsu64 v2:8;
  __tsu64 v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8ll_BFu8s) C1{ Fs:8 FL:8 FL:8 Fs:8}



static void Test_BFs8s_BFu8ll_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8ll_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8ll_BFu8s, BFs8s_BFu8ll_BFu8ll_BFu8s)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s) C1{ Fs:8 FL:8 Fs:8}



static void Test_BFs8s_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s, BFs8s_BFu8ll_BFu8s)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s_BFs8c  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s_BFs8c) C1{ Fs:8 FL:8 Fs:8 Fc:8}



static void Test_BFs8s_BFu8ll_BFu8s_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s_BFs8c, BFs8s_BFu8ll_BFu8s_BFs8c)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s_BFs8i  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s_BFs8i) C1{ Fs:8 FL:8 Fs:8 Fi:8}



static void Test_BFs8s_BFu8ll_BFu8s_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s_BFs8i, BFs8s_BFu8ll_BFu8s_BFs8i)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s_BFs8ll  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s_BFs8ll) C1{ Fs:8 FL:8 Fs:8 FL:8}



static void Test_BFs8s_BFu8ll_BFu8s_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s_BFs8ll, BFs8s_BFu8ll_BFu8s_BFs8ll)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s_BFs8s  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s_BFs8s) C1{ Fs:8 FL:8 Fs:8 Fs:8}



static void Test_BFs8s_BFu8ll_BFu8s_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s_BFs8s, BFs8s_BFu8ll_BFu8s_BFs8s)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s_BFu8c  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s_BFu8c) C1{ Fs:8 FL:8 Fs:8 Fc:8}



static void Test_BFs8s_BFu8ll_BFu8s_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s_BFu8c, BFs8s_BFu8ll_BFu8s_BFu8c)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s_BFu8i  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s_BFu8i) C1{ Fs:8 FL:8 Fs:8 Fi:8}



static void Test_BFs8s_BFu8ll_BFu8s_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s_BFu8i, BFs8s_BFu8ll_BFu8s_BFu8i)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s_BFu8ll  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s_BFu8ll) C1{ Fs:8 FL:8 Fs:8 FL:8}



static void Test_BFs8s_BFu8ll_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s_BFu8ll, BFs8s_BFu8ll_BFu8s_BFu8ll)
//============================================================================


struct  BFs8s_BFu8ll_BFu8s_BFu8s  {
  signed short v1:8;
  __tsu64 v2:8;
  unsigned short v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8ll_BFu8s_BFu8s) C1{ Fs:8 FL:8 Fs:8 Fs:8}



static void Test_BFs8s_BFu8ll_BFu8s_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8ll_BFu8s_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8ll_BFu8s_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8ll_BFu8s_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8ll_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8ll_BFu8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8ll_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8ll_BFu8s_BFu8s, BFs8s_BFu8ll_BFu8s_BFu8s)
//============================================================================


struct  BFs8s_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
};
//SIG(1 BFs8s_BFu8s) C1{ Fs:8 Fs:8}



static void Test_BFs8s_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFs8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s, BFs8s_BFu8s)
//============================================================================


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



static void Test_BFs8s_BFu8s_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c, BFs8s_BFu8s_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8c_BFs8c  {
  signed short v1:8;
  unsigned short v2:8;
  signed char v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8c_BFs8c) C1{ Fs:8 Fs:8 Fc:8 Fc:8}



static void Test_BFs8s_BFu8s_BFs8c_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8c_BFs8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c_BFs8c, BFs8s_BFu8s_BFs8c_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8c_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed char v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8c_BFs8i) C1{ Fs:8 Fs:8 Fc:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8c_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8c_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c_BFs8i, BFs8s_BFu8s_BFs8c_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8c_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed char v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8c_BFs8ll) C1{ Fs:8 Fs:8 Fc:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8c_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c_BFs8ll, BFs8s_BFu8s_BFs8c_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8c_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed char v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8c_BFs8s) C1{ Fs:8 Fs:8 Fc:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8c_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8c_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8c_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c_BFs8s, BFs8s_BFu8s_BFs8c_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFs8c_BFu8c  {
  signed short v1:8;
  unsigned short v2:8;
  signed char v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8c_BFu8c) C1{ Fs:8 Fs:8 Fc:8 Fc:8}



static void Test_BFs8s_BFu8s_BFs8c_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c_BFu8c, BFs8s_BFu8s_BFs8c_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8c_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed char v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8c_BFu8i) C1{ Fs:8 Fs:8 Fc:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8c_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c_BFu8i, BFs8s_BFu8s_BFs8c_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8c_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed char v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8c_BFu8ll) C1{ Fs:8 Fs:8 Fc:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8c_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c_BFu8ll, BFs8s_BFu8s_BFs8c_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8c_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed char v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8c_BFu8s) C1{ Fs:8 Fs:8 Fc:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8c_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8c_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8c_BFu8s, BFs8s_BFu8s_BFs8c_BFu8s)
//============================================================================


struct  BFs8s_BFu8s_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i) C1{ Fs:8 Fs:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i, BFs8s_BFu8s_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8i_BFs8c  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i_BFs8c) C1{ Fs:8 Fs:8 Fi:8 Fc:8}



static void Test_BFs8s_BFu8s_BFs8i_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8i_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i_BFs8c, BFs8s_BFu8s_BFs8i_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8i_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i_BFs8i) C1{ Fs:8 Fs:8 Fi:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8i_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8i_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i_BFs8i, BFs8s_BFu8s_BFs8i_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8i_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i_BFs8ll) C1{ Fs:8 Fs:8 Fi:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8i_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i_BFs8ll, BFs8s_BFu8s_BFs8i_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8i_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i_BFs8s) C1{ Fs:8 Fs:8 Fi:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8i_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8i_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i_BFs8s, BFs8s_BFu8s_BFs8i_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFs8i_BFu8c  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i_BFu8c) C1{ Fs:8 Fs:8 Fi:8 Fc:8}



static void Test_BFs8s_BFu8s_BFs8i_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i_BFu8c, BFs8s_BFu8s_BFs8i_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8i_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i_BFu8i) C1{ Fs:8 Fs:8 Fi:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8i_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i_BFu8i, BFs8s_BFu8s_BFs8i_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8i_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i_BFu8ll) C1{ Fs:8 Fs:8 Fi:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8i_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i_BFu8ll, BFs8s_BFu8s_BFs8i_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8i_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed int v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8i_BFu8s) C1{ Fs:8 Fs:8 Fi:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8i_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8i_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8i_BFu8s, BFs8s_BFu8s_BFs8i_BFu8s)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll) C1{ Fs:8 Fs:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll, BFs8s_BFu8s_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll_BFs8c  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll_BFs8c) C1{ Fs:8 Fs:8 FL:8 Fc:8}



static void Test_BFs8s_BFu8s_BFs8ll_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll_BFs8c, BFs8s_BFu8s_BFs8ll_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll_BFs8i) C1{ Fs:8 Fs:8 FL:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8ll_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll_BFs8i, BFs8s_BFu8s_BFs8ll_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll_BFs8ll) C1{ Fs:8 Fs:8 FL:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8ll_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll_BFs8ll, BFs8s_BFu8s_BFs8ll_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll_BFs8s) C1{ Fs:8 Fs:8 FL:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8ll_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll_BFs8s, BFs8s_BFu8s_BFs8ll_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll_BFu8c  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll_BFu8c) C1{ Fs:8 Fs:8 FL:8 Fc:8}



static void Test_BFs8s_BFu8s_BFs8ll_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll_BFu8c, BFs8s_BFu8s_BFs8ll_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll_BFu8i) C1{ Fs:8 Fs:8 FL:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8ll_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll_BFu8i, BFs8s_BFu8s_BFs8ll_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll_BFu8ll) C1{ Fs:8 Fs:8 FL:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8ll_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll_BFu8ll, BFs8s_BFu8s_BFs8ll_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8ll_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed __tsi64 v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8ll_BFu8s) C1{ Fs:8 Fs:8 FL:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8ll_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8ll_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8ll_BFu8s, BFs8s_BFu8s_BFs8ll_BFu8s)
//============================================================================


struct  BFs8s_BFu8s_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s) C1{ Fs:8 Fs:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s, BFs8s_BFu8s_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFs8s_BFs8c  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s_BFs8c) C1{ Fs:8 Fs:8 Fs:8 Fc:8}



static void Test_BFs8s_BFu8s_BFs8s_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8s_BFs8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8s_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s_BFs8c, BFs8s_BFu8s_BFs8s_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8s_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s_BFs8i) C1{ Fs:8 Fs:8 Fs:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8s_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8s_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8s_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s_BFs8i, BFs8s_BFu8s_BFs8s_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8s_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s_BFs8ll) C1{ Fs:8 Fs:8 Fs:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8s_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8s_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8s_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s_BFs8ll, BFs8s_BFu8s_BFs8s_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8s_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s_BFs8s) C1{ Fs:8 Fs:8 Fs:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8s_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8s_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8s_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s_BFs8s, BFs8s_BFu8s_BFs8s_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFs8s_BFu8c  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s_BFu8c) C1{ Fs:8 Fs:8 Fs:8 Fc:8}



static void Test_BFs8s_BFu8s_BFs8s_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s_BFu8c, BFs8s_BFu8s_BFs8s_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFs8s_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s_BFu8i) C1{ Fs:8 Fs:8 Fs:8 Fi:8}



static void Test_BFs8s_BFu8s_BFs8s_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFs8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s_BFu8i, BFs8s_BFu8s_BFs8s_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFs8s_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s_BFu8ll) C1{ Fs:8 Fs:8 Fs:8 FL:8}



static void Test_BFs8s_BFu8s_BFs8s_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFs8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFs8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s_BFu8ll, BFs8s_BFu8s_BFs8s_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFs8s_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  signed short v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFs8s_BFu8s) C1{ Fs:8 Fs:8 Fs:8 Fs:8}



static void Test_BFs8s_BFu8s_BFs8s_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFs8s_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFs8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFs8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFs8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFs8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFs8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFs8s_BFu8s, BFs8s_BFu8s_BFs8s_BFu8s)
//============================================================================


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



static void Test_BFs8s_BFu8s_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c, BFs8s_BFu8s_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8c_BFs8c  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned char v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8c_BFs8c) C1{ Fs:8 Fs:8 Fc:8 Fc:8}



static void Test_BFs8s_BFu8s_BFu8c_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8c_BFs8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8c_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c_BFs8c, BFs8s_BFu8s_BFu8c_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8c_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned char v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8c_BFs8i) C1{ Fs:8 Fs:8 Fc:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8c_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8c_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8c_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c_BFs8i, BFs8s_BFu8s_BFu8c_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8c_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned char v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8c_BFs8ll) C1{ Fs:8 Fs:8 Fc:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8c_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8c_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8c_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c_BFs8ll, BFs8s_BFu8s_BFu8c_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8c_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned char v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8c_BFs8s) C1{ Fs:8 Fs:8 Fc:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8c_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8c_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8c_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c_BFs8s, BFs8s_BFu8s_BFu8c_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFu8c_BFu8c  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned char v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8c_BFu8c) C1{ Fs:8 Fs:8 Fc:8 Fc:8}



static void Test_BFs8s_BFu8s_BFu8c_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8c_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c_BFu8c, BFs8s_BFu8s_BFu8c_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8c_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned char v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8c_BFu8i) C1{ Fs:8 Fs:8 Fc:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8c_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c_BFu8i, BFs8s_BFu8s_BFu8c_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8c_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned char v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8c_BFu8ll) C1{ Fs:8 Fs:8 Fc:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c_BFu8ll, BFs8s_BFu8s_BFu8c_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8c_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned char v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8c_BFu8s) C1{ Fs:8 Fs:8 Fc:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8c_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8c_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8c_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8c_BFu8s, BFs8s_BFu8s_BFu8c_BFu8s)
//============================================================================


struct  BFs8s_BFu8s_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i) C1{ Fs:8 Fs:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i, BFs8s_BFu8s_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8i_BFs8c  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i_BFs8c) C1{ Fs:8 Fs:8 Fi:8 Fc:8}



static void Test_BFs8s_BFu8s_BFu8i_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8i_BFs8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8i_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i_BFs8c, BFs8s_BFu8s_BFu8i_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8i_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i_BFs8i) C1{ Fs:8 Fs:8 Fi:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8i_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8i_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8i_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i_BFs8i, BFs8s_BFu8s_BFu8i_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8i_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i_BFs8ll) C1{ Fs:8 Fs:8 Fi:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8i_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8i_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8i_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i_BFs8ll, BFs8s_BFu8s_BFu8i_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8i_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i_BFs8s) C1{ Fs:8 Fs:8 Fi:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8i_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8i_BFs8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8i_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i_BFs8s, BFs8s_BFu8s_BFu8i_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFu8i_BFu8c  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i_BFu8c) C1{ Fs:8 Fs:8 Fi:8 Fc:8}



static void Test_BFs8s_BFu8s_BFu8i_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i_BFu8c, BFs8s_BFu8s_BFu8i_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8i_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i_BFu8i) C1{ Fs:8 Fs:8 Fi:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8i_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i_BFu8i, BFs8s_BFu8s_BFu8i_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8i_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i_BFu8ll) C1{ Fs:8 Fs:8 Fi:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i_BFu8ll, BFs8s_BFu8s_BFu8i_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8i_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned int v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8i_BFu8s) C1{ Fs:8 Fs:8 Fi:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8i_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8i_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8i_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8i_BFu8s, BFs8s_BFu8s_BFu8i_BFu8s)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll) C1{ Fs:8 Fs:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll, BFs8s_BFu8s_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll_BFs8c  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll_BFs8c) C1{ Fs:8 Fs:8 FL:8 Fc:8}



static void Test_BFs8s_BFu8s_BFu8ll_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll_BFs8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll_BFs8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll_BFs8c, BFs8s_BFu8s_BFu8ll_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll_BFs8i) C1{ Fs:8 Fs:8 FL:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8ll_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll_BFs8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll_BFs8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll_BFs8i, BFs8s_BFu8s_BFu8ll_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll_BFs8ll) C1{ Fs:8 Fs:8 FL:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8ll_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll_BFs8ll, BFs8s_BFu8s_BFu8ll_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll_BFs8s) C1{ Fs:8 Fs:8 FL:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8ll_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll_BFs8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll_BFs8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll_BFs8s, BFs8s_BFu8s_BFu8ll_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll_BFu8c  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll_BFu8c) C1{ Fs:8 Fs:8 FL:8 Fc:8}



static void Test_BFs8s_BFu8s_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll_BFu8c, BFs8s_BFu8s_BFu8ll_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll_BFu8i) C1{ Fs:8 Fs:8 FL:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll_BFu8i, BFs8s_BFu8s_BFu8ll_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll_BFu8ll) C1{ Fs:8 Fs:8 FL:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll_BFu8ll, BFs8s_BFu8s_BFu8ll_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8ll_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  __tsu64 v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8ll_BFu8s) C1{ Fs:8 Fs:8 FL:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8ll_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8ll_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8ll_BFu8s, BFs8s_BFu8s_BFu8ll_BFu8s)
//============================================================================


struct  BFs8s_BFu8s_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s) C1{ Fs:8 Fs:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s, BFs8s_BFu8s_BFu8s)
//============================================================================


struct  BFs8s_BFu8s_BFu8s_BFs8c  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
  signed char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s_BFs8c) C1{ Fs:8 Fs:8 Fs:8 Fc:8}



static void Test_BFs8s_BFu8s_BFu8s_BFs8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s_BFs8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s_BFs8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8s_BFs8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8s_BFs8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s_BFs8c, BFs8s_BFu8s_BFu8s_BFs8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8s_BFs8i  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
  signed int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s_BFs8i) C1{ Fs:8 Fs:8 Fs:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8s_BFs8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s_BFs8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s_BFs8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8s_BFs8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8s_BFs8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s_BFs8i, BFs8s_BFu8s_BFu8s_BFs8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8s_BFs8ll  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
  signed __tsi64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s_BFs8ll) C1{ Fs:8 Fs:8 Fs:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8s_BFs8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s_BFs8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s_BFs8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8s_BFs8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8s_BFs8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s_BFs8ll, BFs8s_BFu8s_BFu8s_BFs8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8s_BFs8s  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
  signed short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s_BFs8s) C1{ Fs:8 Fs:8 Fs:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8s_BFs8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s_BFs8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s_BFs8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8s_BFs8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8s_BFs8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFs8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFs8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s_BFs8s, BFs8s_BFu8s_BFu8s_BFs8s)
//============================================================================


struct  BFs8s_BFu8s_BFu8s_BFu8c  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
  unsigned char v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s_BFu8c) C1{ Fs:8 Fs:8 Fs:8 Fc:8}



static void Test_BFs8s_BFu8s_BFu8s_BFu8c()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s_BFu8c");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8c");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s_BFu8c, BFs8s_BFu8s_BFu8s_BFu8c)
//============================================================================


struct  BFs8s_BFu8s_BFu8s_BFu8i  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
  unsigned int v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s_BFu8i) C1{ Fs:8 Fs:8 Fs:8 Fi:8}



static void Test_BFs8s_BFu8s_BFu8s_BFu8i()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s_BFu8i");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs8s_BFu8s_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8i");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s_BFu8i, BFs8s_BFu8s_BFu8s_BFu8i)
//============================================================================


struct  BFs8s_BFu8s_BFu8s_BFu8ll  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
  __tsu64 v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s_BFu8ll) C1{ Fs:8 Fs:8 Fs:8 FL:8}



static void Test_BFs8s_BFu8s_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s_BFu8ll");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs8s_BFu8s_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs8s_BFu8s_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8ll");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s_BFu8ll, BFs8s_BFu8s_BFu8s_BFu8ll)
//============================================================================


struct  BFs8s_BFu8s_BFu8s_BFu8s  {
  signed short v1:8;
  unsigned short v2:8;
  unsigned short v3:8;
  unsigned short v4:8;
};
//SIG(1 BFs8s_BFu8s_BFu8s_BFu8s) C1{ Fs:8 Fs:8 Fs:8 Fs:8}



static void Test_BFs8s_BFu8s_BFu8s_BFu8s()
{
  {
    init_simple_test("BFs8s_BFu8s_BFu8s_BFu8s");
    static STRUCT_IF_C BFs8s_BFu8s_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFs8s_BFu8s_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs8s_BFu8s_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 8, hide_sll(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, 1, "BFs8s_BFu8s_BFu8s_BFu8s");
    set_bf_and_test(lv, v4, 3, 0, 8, hide_ull(1LL<<7), "BFs8s_BFu8s_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs8s_BFu8s_BFu8s_BFu8s, BFs8s_BFu8s_BFu8s_BFu8s)
//============================================================================


struct  BFs9i_BFs9i  {
  signed int v1:9;
  signed int v2:9;
};
//SIG(1 BFs9i_BFs9i) C1{ Fi:9 Fi:9}



static void Test_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i, BFs9i_BFs9i)
//============================================================================


struct  BFs9i_BFs9i_BFs9i  {
  signed int v1:9;
  signed int v2:9;
  signed int v3:9;
};
//SIG(1 BFs9i_BFs9i_BFs9i) C1{ Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9i, BFs9i_BFs9i_BFs9i)
//============================================================================


struct  BFs9i_BFs9i_BFs9i_BFs9i  {
  signed int v1:9;
  signed int v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9i_BFs9i) C1{ Fi:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9i_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9i_BFs9i, BFs9i_BFs9i_BFs9i_BFs9i)
//============================================================================


struct  BFs9i_BFs9i_BFs9i_BFs9ll  {
  signed int v1:9;
  signed int v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9i_BFs9ll) C1{ Fi:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9i_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9i_BFs9ll, BFs9i_BFs9i_BFs9i_BFs9ll)
//============================================================================


struct  BFs9i_BFs9i_BFs9i_BFs9s  {
  signed int v1:9;
  signed int v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9i_BFs9s) C1{ Fi:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9i_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9i_BFs9s, BFs9i_BFs9i_BFs9i_BFs9s)
//============================================================================


struct  BFs9i_BFs9i_BFs9i_BFu9i  {
  signed int v1:9;
  signed int v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9i_BFu9i) C1{ Fi:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9i_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9i_BFu9i, BFs9i_BFs9i_BFs9i_BFu9i)
//============================================================================


struct  BFs9i_BFs9i_BFs9i_BFu9ll  {
  signed int v1:9;
  signed int v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9i_BFu9ll) C1{ Fi:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9i_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9i_BFu9ll, BFs9i_BFs9i_BFs9i_BFu9ll)
//============================================================================


struct  BFs9i_BFs9i_BFs9i_BFu9s  {
  signed int v1:9;
  signed int v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9i_BFu9s) C1{ Fi:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9i_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9i_BFu9s, BFs9i_BFs9i_BFs9i_BFu9s)
//============================================================================


struct  BFs9i_BFs9i_BFs9ll  {
  signed int v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9i_BFs9i_BFs9ll) C1{ Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9ll, BFs9i_BFs9i_BFs9ll)
//============================================================================


struct  BFs9i_BFs9i_BFs9ll_BFs9i  {
  signed int v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9ll_BFs9i) C1{ Fi:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9i_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9ll_BFs9i, BFs9i_BFs9i_BFs9ll_BFs9i)
//============================================================================


struct  BFs9i_BFs9i_BFs9ll_BFs9ll  {
  signed int v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9ll_BFs9ll) C1{ Fi:9 Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFs9i_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9ll_BFs9ll, BFs9i_BFs9i_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFs9i_BFs9ll_BFs9s  {
  signed int v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9ll_BFs9s) C1{ Fi:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9i_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9ll_BFs9s, BFs9i_BFs9i_BFs9ll_BFs9s)
//============================================================================


struct  BFs9i_BFs9i_BFs9ll_BFu9i  {
  signed int v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9ll_BFu9i) C1{ Fi:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9i_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9ll_BFu9i, BFs9i_BFs9i_BFs9ll_BFu9i)
//============================================================================


struct  BFs9i_BFs9i_BFs9ll_BFu9ll  {
  signed int v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9ll_BFu9ll) C1{ Fi:9 Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFs9i_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9ll_BFu9ll, BFs9i_BFs9i_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFs9i_BFs9ll_BFu9s  {
  signed int v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9ll_BFu9s) C1{ Fi:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9i_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9ll_BFu9s, BFs9i_BFs9i_BFs9ll_BFu9s)
//============================================================================


struct  BFs9i_BFs9i_BFs9s  {
  signed int v1:9;
  signed int v2:9;
  signed short v3:9;
};
//SIG(1 BFs9i_BFs9i_BFs9s) C1{ Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9s, BFs9i_BFs9i_BFs9s)
//============================================================================


struct  BFs9i_BFs9i_BFs9s_BFs9i  {
  signed int v1:9;
  signed int v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9s_BFs9i) C1{ Fi:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9i_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9s_BFs9i, BFs9i_BFs9i_BFs9s_BFs9i)
//============================================================================


struct  BFs9i_BFs9i_BFs9s_BFs9ll  {
  signed int v1:9;
  signed int v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9s_BFs9ll) C1{ Fi:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9s_BFs9ll, BFs9i_BFs9i_BFs9s_BFs9ll)
//============================================================================


struct  BFs9i_BFs9i_BFs9s_BFs9s  {
  signed int v1:9;
  signed int v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9s_BFs9s) C1{ Fi:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9s_BFs9s, BFs9i_BFs9i_BFs9s_BFs9s)
//============================================================================


struct  BFs9i_BFs9i_BFs9s_BFu9i  {
  signed int v1:9;
  signed int v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9s_BFu9i) C1{ Fi:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9s_BFu9i, BFs9i_BFs9i_BFs9s_BFu9i)
//============================================================================


struct  BFs9i_BFs9i_BFs9s_BFu9ll  {
  signed int v1:9;
  signed int v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9s_BFu9ll) C1{ Fi:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9s_BFu9ll, BFs9i_BFs9i_BFs9s_BFu9ll)
//============================================================================


struct  BFs9i_BFs9i_BFs9s_BFu9s  {
  signed int v1:9;
  signed int v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFs9s_BFu9s) C1{ Fi:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFs9s_BFu9s, BFs9i_BFs9i_BFs9s_BFu9s)
//============================================================================


struct  BFs9i_BFs9i_BFu9i  {
  signed int v1:9;
  signed int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9i_BFs9i_BFu9i) C1{ Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9i, BFs9i_BFs9i_BFu9i)
//============================================================================


struct  BFs9i_BFs9i_BFu9i_BFs9i  {
  signed int v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9i_BFs9i) C1{ Fi:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9i_BFs9i, BFs9i_BFs9i_BFu9i_BFs9i)
//============================================================================


struct  BFs9i_BFs9i_BFu9i_BFs9ll  {
  signed int v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9i_BFs9ll) C1{ Fi:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9i_BFs9ll, BFs9i_BFs9i_BFu9i_BFs9ll)
//============================================================================


struct  BFs9i_BFs9i_BFu9i_BFs9s  {
  signed int v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9i_BFs9s) C1{ Fi:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9i_BFs9s, BFs9i_BFs9i_BFu9i_BFs9s)
//============================================================================


struct  BFs9i_BFs9i_BFu9i_BFu9i  {
  signed int v1:9;
  signed int v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9i_BFu9i) C1{ Fi:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9i_BFu9i, BFs9i_BFs9i_BFu9i_BFu9i)
//============================================================================


struct  BFs9i_BFs9i_BFu9i_BFu9ll  {
  signed int v1:9;
  signed int v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9i_BFu9ll) C1{ Fi:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9i_BFu9ll, BFs9i_BFs9i_BFu9i_BFu9ll)
//============================================================================


struct  BFs9i_BFs9i_BFu9i_BFu9s  {
  signed int v1:9;
  signed int v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9i_BFu9s) C1{ Fi:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9i_BFu9s, BFs9i_BFs9i_BFu9i_BFu9s)
//============================================================================


struct  BFs9i_BFs9i_BFu9ll  {
  signed int v1:9;
  signed int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9i_BFs9i_BFu9ll) C1{ Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9ll, BFs9i_BFs9i_BFu9ll)
//============================================================================


struct  BFs9i_BFs9i_BFu9ll_BFs9i  {
  signed int v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9ll_BFs9i) C1{ Fi:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9ll_BFs9i, BFs9i_BFs9i_BFu9ll_BFs9i)
//============================================================================


struct  BFs9i_BFs9i_BFu9ll_BFs9ll  {
  signed int v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9ll_BFs9ll) C1{ Fi:9 Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFs9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9ll_BFs9ll, BFs9i_BFs9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFs9i_BFu9ll_BFs9s  {
  signed int v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9ll_BFs9s) C1{ Fi:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9ll_BFs9s, BFs9i_BFs9i_BFu9ll_BFs9s)
//============================================================================


struct  BFs9i_BFs9i_BFu9ll_BFu9i  {
  signed int v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9ll_BFu9i) C1{ Fi:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9ll_BFu9i, BFs9i_BFs9i_BFu9ll_BFu9i)
//============================================================================


struct  BFs9i_BFs9i_BFu9ll_BFu9ll  {
  signed int v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9ll_BFu9ll) C1{ Fi:9 Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFs9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9ll_BFu9ll, BFs9i_BFs9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFs9i_BFu9ll_BFu9s  {
  signed int v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9ll_BFu9s) C1{ Fi:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9ll_BFu9s, BFs9i_BFs9i_BFu9ll_BFu9s)
//============================================================================


struct  BFs9i_BFs9i_BFu9s  {
  signed int v1:9;
  signed int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9i_BFs9i_BFu9s) C1{ Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9s, BFs9i_BFs9i_BFu9s)
//============================================================================


struct  BFs9i_BFs9i_BFu9s_BFs9i  {
  signed int v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9s_BFs9i) C1{ Fi:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9s_BFs9i, BFs9i_BFs9i_BFu9s_BFs9i)
//============================================================================


struct  BFs9i_BFs9i_BFu9s_BFs9ll  {
  signed int v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9s_BFs9ll) C1{ Fi:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9s_BFs9ll, BFs9i_BFs9i_BFu9s_BFs9ll)
//============================================================================


struct  BFs9i_BFs9i_BFu9s_BFs9s  {
  signed int v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9s_BFs9s) C1{ Fi:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9s_BFs9s, BFs9i_BFs9i_BFu9s_BFs9s)
//============================================================================


struct  BFs9i_BFs9i_BFu9s_BFu9i  {
  signed int v1:9;
  signed int v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9s_BFu9i) C1{ Fi:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9s_BFu9i, BFs9i_BFs9i_BFu9s_BFu9i)
//============================================================================


struct  BFs9i_BFs9i_BFu9s_BFu9ll  {
  signed int v1:9;
  signed int v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9s_BFu9ll) C1{ Fi:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9s_BFu9ll, BFs9i_BFs9i_BFu9s_BFu9ll)
//============================================================================


struct  BFs9i_BFs9i_BFu9s_BFu9s  {
  signed int v1:9;
  signed int v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9i_BFu9s_BFu9s) C1{ Fi:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9i_BFu9s_BFu9s, BFs9i_BFs9i_BFu9s_BFu9s)
//============================================================================


struct  BFs9i_BFs9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
};
//SIG(1 BFs9i_BFs9ll) C1{ Fi:9 FL:9}



static void Test_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll, BFs9i_BFs9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFs9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9i) C1{ Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9i, BFs9i_BFs9ll_BFs9i)
//============================================================================


struct  BFs9i_BFs9ll_BFs9i_BFs9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9i_BFs9i) C1{ Fi:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9i_BFs9i, BFs9i_BFs9ll_BFs9i_BFs9i)
//============================================================================


struct  BFs9i_BFs9ll_BFs9i_BFs9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9i_BFs9ll) C1{ Fi:9 FL:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9i_BFs9ll, BFs9i_BFs9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFs9i_BFs9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9i_BFs9s) C1{ Fi:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9i_BFs9s, BFs9i_BFs9ll_BFs9i_BFs9s)
//============================================================================


struct  BFs9i_BFs9ll_BFs9i_BFu9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9i_BFu9i) C1{ Fi:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9i_BFu9i, BFs9i_BFs9ll_BFs9i_BFu9i)
//============================================================================


struct  BFs9i_BFs9ll_BFs9i_BFu9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9i_BFu9ll) C1{ Fi:9 FL:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9i_BFu9ll, BFs9i_BFs9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFs9i_BFu9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9i_BFu9s) C1{ Fi:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9i_BFu9s, BFs9i_BFs9ll_BFs9i_BFu9s)
//============================================================================


struct  BFs9i_BFs9ll_BFs9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9ll) C1{ Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9ll, BFs9i_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFs9ll_BFs9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9ll_BFs9i) C1{ Fi:9 FL:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9ll_BFs9i, BFs9i_BFs9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFs9i_BFs9ll_BFs9ll_BFs9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9ll_BFs9ll) C1{ Fi:9 FL:9 FL:9 FL:9}



static void Test_BFs9i_BFs9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9ll_BFs9ll, BFs9i_BFs9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFs9ll_BFs9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9ll_BFs9s) C1{ Fi:9 FL:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9ll_BFs9s, BFs9i_BFs9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFs9i_BFs9ll_BFs9ll_BFu9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9ll_BFu9i) C1{ Fi:9 FL:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9ll_BFu9i, BFs9i_BFs9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFs9i_BFs9ll_BFs9ll_BFu9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9ll_BFu9ll) C1{ Fi:9 FL:9 FL:9 FL:9}



static void Test_BFs9i_BFs9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9ll_BFu9ll, BFs9i_BFs9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFs9ll_BFu9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9ll_BFu9s) C1{ Fi:9 FL:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9ll_BFu9s, BFs9i_BFs9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFs9i_BFs9ll_BFs9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9s) C1{ Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9s, BFs9i_BFs9ll_BFs9s)
//============================================================================


struct  BFs9i_BFs9ll_BFs9s_BFs9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9s_BFs9i) C1{ Fi:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9s_BFs9i, BFs9i_BFs9ll_BFs9s_BFs9i)
//============================================================================


struct  BFs9i_BFs9ll_BFs9s_BFs9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9s_BFs9ll) C1{ Fi:9 FL:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9s_BFs9ll, BFs9i_BFs9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFs9s_BFs9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9s_BFs9s) C1{ Fi:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9s_BFs9s, BFs9i_BFs9ll_BFs9s_BFs9s)
//============================================================================


struct  BFs9i_BFs9ll_BFs9s_BFu9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9s_BFu9i) C1{ Fi:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9s_BFu9i, BFs9i_BFs9ll_BFs9s_BFu9i)
//============================================================================


struct  BFs9i_BFs9ll_BFs9s_BFu9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9s_BFu9ll) C1{ Fi:9 FL:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9s_BFu9ll, BFs9i_BFs9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFs9s_BFu9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFs9s_BFu9s) C1{ Fi:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFs9s_BFu9s, BFs9i_BFs9ll_BFs9s_BFu9s)
//============================================================================


struct  BFs9i_BFs9ll_BFu9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9i) C1{ Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9i, BFs9i_BFs9ll_BFu9i)
//============================================================================


struct  BFs9i_BFs9ll_BFu9i_BFs9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9i_BFs9i) C1{ Fi:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9i_BFs9i, BFs9i_BFs9ll_BFu9i_BFs9i)
//============================================================================


struct  BFs9i_BFs9ll_BFu9i_BFs9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9i_BFs9ll) C1{ Fi:9 FL:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9i_BFs9ll, BFs9i_BFs9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFu9i_BFs9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9i_BFs9s) C1{ Fi:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9i_BFs9s, BFs9i_BFs9ll_BFu9i_BFs9s)
//============================================================================


struct  BFs9i_BFs9ll_BFu9i_BFu9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9i_BFu9i) C1{ Fi:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9i_BFu9i, BFs9i_BFs9ll_BFu9i_BFu9i)
//============================================================================


struct  BFs9i_BFs9ll_BFu9i_BFu9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9i_BFu9ll) C1{ Fi:9 FL:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9i_BFu9ll, BFs9i_BFs9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFu9i_BFu9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9i_BFu9s) C1{ Fi:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9i_BFu9s, BFs9i_BFs9ll_BFu9i_BFu9s)
//============================================================================


struct  BFs9i_BFs9ll_BFu9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9ll) C1{ Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9ll, BFs9i_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFu9ll_BFs9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9ll_BFs9i) C1{ Fi:9 FL:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9ll_BFs9i, BFs9i_BFs9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFs9i_BFs9ll_BFu9ll_BFs9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9ll_BFs9ll) C1{ Fi:9 FL:9 FL:9 FL:9}



static void Test_BFs9i_BFs9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9ll_BFs9ll, BFs9i_BFs9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFu9ll_BFs9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9ll_BFs9s) C1{ Fi:9 FL:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9ll_BFs9s, BFs9i_BFs9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFs9i_BFs9ll_BFu9ll_BFu9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9ll_BFu9i) C1{ Fi:9 FL:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9ll_BFu9i, BFs9i_BFs9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFs9i_BFs9ll_BFu9ll_BFu9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9ll_BFu9ll) C1{ Fi:9 FL:9 FL:9 FL:9}



static void Test_BFs9i_BFs9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9ll_BFu9ll, BFs9i_BFs9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFu9ll_BFu9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9ll_BFu9s) C1{ Fi:9 FL:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9ll_BFu9s, BFs9i_BFs9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFs9i_BFs9ll_BFu9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9s) C1{ Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9s, BFs9i_BFs9ll_BFu9s)
//============================================================================


struct  BFs9i_BFs9ll_BFu9s_BFs9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9s_BFs9i) C1{ Fi:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9s_BFs9i, BFs9i_BFs9ll_BFu9s_BFs9i)
//============================================================================


struct  BFs9i_BFs9ll_BFu9s_BFs9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9s_BFs9ll) C1{ Fi:9 FL:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9s_BFs9ll, BFs9i_BFs9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFu9s_BFs9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9s_BFs9s) C1{ Fi:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9s_BFs9s, BFs9i_BFs9ll_BFu9s_BFs9s)
//============================================================================


struct  BFs9i_BFs9ll_BFu9s_BFu9i  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9s_BFu9i) C1{ Fi:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9s_BFu9i, BFs9i_BFs9ll_BFu9s_BFu9i)
//============================================================================


struct  BFs9i_BFs9ll_BFu9s_BFu9ll  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9s_BFu9ll) C1{ Fi:9 FL:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9s_BFu9ll, BFs9i_BFs9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFs9i_BFs9ll_BFu9s_BFu9s  {
  signed int v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9ll_BFu9s_BFu9s) C1{ Fi:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9ll_BFu9s_BFu9s, BFs9i_BFs9ll_BFu9s_BFu9s)
//============================================================================


struct  BFs9i_BFs9s  {
  signed int v1:9;
  signed short v2:9;
};
//SIG(1 BFs9i_BFs9s) C1{ Fi:9 Fs:9}



static void Test_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s, BFs9i_BFs9s)
//============================================================================


struct  BFs9i_BFs9s_BFs9i  {
  signed int v1:9;
  signed short v2:9;
  signed int v3:9;
};
//SIG(1 BFs9i_BFs9s_BFs9i) C1{ Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9i, BFs9i_BFs9s_BFs9i)
//============================================================================


struct  BFs9i_BFs9s_BFs9i_BFs9i  {
  signed int v1:9;
  signed short v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9i_BFs9i) C1{ Fi:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9i_BFs9i, BFs9i_BFs9s_BFs9i_BFs9i)
//============================================================================


struct  BFs9i_BFs9s_BFs9i_BFs9ll  {
  signed int v1:9;
  signed short v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9i_BFs9ll) C1{ Fi:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9i_BFs9ll, BFs9i_BFs9s_BFs9i_BFs9ll)
//============================================================================


struct  BFs9i_BFs9s_BFs9i_BFs9s  {
  signed int v1:9;
  signed short v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9i_BFs9s) C1{ Fi:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9i_BFs9s, BFs9i_BFs9s_BFs9i_BFs9s)
//============================================================================


struct  BFs9i_BFs9s_BFs9i_BFu9i  {
  signed int v1:9;
  signed short v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9i_BFu9i) C1{ Fi:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9i_BFu9i, BFs9i_BFs9s_BFs9i_BFu9i)
//============================================================================


struct  BFs9i_BFs9s_BFs9i_BFu9ll  {
  signed int v1:9;
  signed short v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9i_BFu9ll) C1{ Fi:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9i_BFu9ll, BFs9i_BFs9s_BFs9i_BFu9ll)
//============================================================================


struct  BFs9i_BFs9s_BFs9i_BFu9s  {
  signed int v1:9;
  signed short v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9i_BFu9s) C1{ Fi:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9i_BFu9s, BFs9i_BFs9s_BFs9i_BFu9s)
//============================================================================


struct  BFs9i_BFs9s_BFs9ll  {
  signed int v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9i_BFs9s_BFs9ll) C1{ Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9ll, BFs9i_BFs9s_BFs9ll)
//============================================================================


struct  BFs9i_BFs9s_BFs9ll_BFs9i  {
  signed int v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9ll_BFs9i) C1{ Fi:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9ll_BFs9i, BFs9i_BFs9s_BFs9ll_BFs9i)
//============================================================================


struct  BFs9i_BFs9s_BFs9ll_BFs9ll  {
  signed int v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9ll_BFs9ll) C1{ Fi:9 Fs:9 FL:9 FL:9}



static void Test_BFs9i_BFs9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9ll_BFs9ll, BFs9i_BFs9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFs9s_BFs9ll_BFs9s  {
  signed int v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9ll_BFs9s) C1{ Fi:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9ll_BFs9s, BFs9i_BFs9s_BFs9ll_BFs9s)
//============================================================================


struct  BFs9i_BFs9s_BFs9ll_BFu9i  {
  signed int v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9ll_BFu9i) C1{ Fi:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9ll_BFu9i, BFs9i_BFs9s_BFs9ll_BFu9i)
//============================================================================


struct  BFs9i_BFs9s_BFs9ll_BFu9ll  {
  signed int v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9ll_BFu9ll) C1{ Fi:9 Fs:9 FL:9 FL:9}



static void Test_BFs9i_BFs9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9ll_BFu9ll, BFs9i_BFs9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFs9s_BFs9ll_BFu9s  {
  signed int v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9ll_BFu9s) C1{ Fi:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9ll_BFu9s, BFs9i_BFs9s_BFs9ll_BFu9s)
//============================================================================


struct  BFs9i_BFs9s_BFs9s  {
  signed int v1:9;
  signed short v2:9;
  signed short v3:9;
};
//SIG(1 BFs9i_BFs9s_BFs9s) C1{ Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9s, BFs9i_BFs9s_BFs9s)
//============================================================================


struct  BFs9i_BFs9s_BFs9s_BFs9i  {
  signed int v1:9;
  signed short v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9s_BFs9i) C1{ Fi:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9s_BFs9i, BFs9i_BFs9s_BFs9s_BFs9i)
//============================================================================


struct  BFs9i_BFs9s_BFs9s_BFs9ll  {
  signed int v1:9;
  signed short v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9s_BFs9ll) C1{ Fi:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9s_BFs9ll, BFs9i_BFs9s_BFs9s_BFs9ll)
//============================================================================


struct  BFs9i_BFs9s_BFs9s_BFs9s  {
  signed int v1:9;
  signed short v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9s_BFs9s) C1{ Fi:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9s_BFs9s, BFs9i_BFs9s_BFs9s_BFs9s)
//============================================================================


struct  BFs9i_BFs9s_BFs9s_BFu9i  {
  signed int v1:9;
  signed short v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9s_BFu9i) C1{ Fi:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9s_BFu9i, BFs9i_BFs9s_BFs9s_BFu9i)
//============================================================================


struct  BFs9i_BFs9s_BFs9s_BFu9ll  {
  signed int v1:9;
  signed short v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9s_BFu9ll) C1{ Fi:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9s_BFu9ll, BFs9i_BFs9s_BFs9s_BFu9ll)
//============================================================================


struct  BFs9i_BFs9s_BFs9s_BFu9s  {
  signed int v1:9;
  signed short v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFs9s_BFu9s) C1{ Fi:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFs9s_BFu9s, BFs9i_BFs9s_BFs9s_BFu9s)
//============================================================================


struct  BFs9i_BFs9s_BFu9i  {
  signed int v1:9;
  signed short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9i_BFs9s_BFu9i) C1{ Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9i, BFs9i_BFs9s_BFu9i)
//============================================================================


struct  BFs9i_BFs9s_BFu9i_BFs9i  {
  signed int v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9i_BFs9i) C1{ Fi:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9i_BFs9i, BFs9i_BFs9s_BFu9i_BFs9i)
//============================================================================


struct  BFs9i_BFs9s_BFu9i_BFs9ll  {
  signed int v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9i_BFs9ll) C1{ Fi:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9i_BFs9ll, BFs9i_BFs9s_BFu9i_BFs9ll)
//============================================================================


struct  BFs9i_BFs9s_BFu9i_BFs9s  {
  signed int v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9i_BFs9s) C1{ Fi:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9i_BFs9s, BFs9i_BFs9s_BFu9i_BFs9s)
//============================================================================


struct  BFs9i_BFs9s_BFu9i_BFu9i  {
  signed int v1:9;
  signed short v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9i_BFu9i) C1{ Fi:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9i_BFs9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9i_BFu9i, BFs9i_BFs9s_BFu9i_BFu9i)
//============================================================================


struct  BFs9i_BFs9s_BFu9i_BFu9ll  {
  signed int v1:9;
  signed short v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9i_BFu9ll) C1{ Fi:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9i_BFs9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9i_BFu9ll, BFs9i_BFs9s_BFu9i_BFu9ll)
//============================================================================


struct  BFs9i_BFs9s_BFu9i_BFu9s  {
  signed int v1:9;
  signed short v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9i_BFu9s) C1{ Fi:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9i_BFs9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9i_BFu9s, BFs9i_BFs9s_BFu9i_BFu9s)
//============================================================================


struct  BFs9i_BFs9s_BFu9ll  {
  signed int v1:9;
  signed short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9i_BFs9s_BFu9ll) C1{ Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9ll, BFs9i_BFs9s_BFu9ll)
//============================================================================


struct  BFs9i_BFs9s_BFu9ll_BFs9i  {
  signed int v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9ll_BFs9i) C1{ Fi:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9ll_BFs9i, BFs9i_BFs9s_BFu9ll_BFs9i)
//============================================================================


struct  BFs9i_BFs9s_BFu9ll_BFs9ll  {
  signed int v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9ll_BFs9ll) C1{ Fi:9 Fs:9 FL:9 FL:9}



static void Test_BFs9i_BFs9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9ll_BFs9ll, BFs9i_BFs9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFs9s_BFu9ll_BFs9s  {
  signed int v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9ll_BFs9s) C1{ Fi:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9ll_BFs9s, BFs9i_BFs9s_BFu9ll_BFs9s)
//============================================================================


struct  BFs9i_BFs9s_BFu9ll_BFu9i  {
  signed int v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9ll_BFu9i) C1{ Fi:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9i_BFs9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9ll_BFu9i, BFs9i_BFs9s_BFu9ll_BFu9i)
//============================================================================


struct  BFs9i_BFs9s_BFu9ll_BFu9ll  {
  signed int v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9ll_BFu9ll) C1{ Fi:9 Fs:9 FL:9 FL:9}



static void Test_BFs9i_BFs9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9ll_BFu9ll, BFs9i_BFs9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFs9s_BFu9ll_BFu9s  {
  signed int v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9ll_BFu9s) C1{ Fi:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9i_BFs9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9ll_BFu9s, BFs9i_BFs9s_BFu9ll_BFu9s)
//============================================================================


struct  BFs9i_BFs9s_BFu9s  {
  signed int v1:9;
  signed short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9i_BFs9s_BFu9s) C1{ Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9s, BFs9i_BFs9s_BFu9s)
//============================================================================


struct  BFs9i_BFs9s_BFu9s_BFs9i  {
  signed int v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9s_BFs9i) C1{ Fi:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9s_BFs9i, BFs9i_BFs9s_BFu9s_BFs9i)
//============================================================================


struct  BFs9i_BFs9s_BFu9s_BFs9ll  {
  signed int v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9s_BFs9ll) C1{ Fi:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9s_BFs9ll, BFs9i_BFs9s_BFu9s_BFs9ll)
//============================================================================


struct  BFs9i_BFs9s_BFu9s_BFs9s  {
  signed int v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9s_BFs9s) C1{ Fi:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9s_BFs9s, BFs9i_BFs9s_BFu9s_BFs9s)
//============================================================================


struct  BFs9i_BFs9s_BFu9s_BFu9i  {
  signed int v1:9;
  signed short v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9s_BFu9i) C1{ Fi:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9i_BFs9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9s_BFu9i, BFs9i_BFs9s_BFu9s_BFu9i)
//============================================================================


struct  BFs9i_BFs9s_BFu9s_BFu9ll  {
  signed int v1:9;
  signed short v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9s_BFu9ll) C1{ Fi:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9i_BFs9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFs9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9s_BFu9ll, BFs9i_BFs9s_BFu9s_BFu9ll)
//============================================================================


struct  BFs9i_BFs9s_BFu9s_BFu9s  {
  signed int v1:9;
  signed short v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFs9s_BFu9s_BFu9s) C1{ Fi:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9i_BFs9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFs9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFs9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFs9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFs9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9i_BFs9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFs9s_BFu9s_BFu9s, BFs9i_BFs9s_BFu9s_BFu9s)
//============================================================================


struct  BFs9i_BFu9i  {
  signed int v1:9;
  unsigned int v2:9;
};
//SIG(1 BFs9i_BFu9i) C1{ Fi:9 Fi:9}



static void Test_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i, BFs9i_BFu9i)
//============================================================================


struct  BFs9i_BFu9i_BFs9i  {
  signed int v1:9;
  unsigned int v2:9;
  signed int v3:9;
};
//SIG(1 BFs9i_BFu9i_BFs9i) C1{ Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9i, BFs9i_BFu9i_BFs9i)
//============================================================================


struct  BFs9i_BFu9i_BFs9i_BFs9i  {
  signed int v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9i_BFs9i) C1{ Fi:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9i_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9i_BFs9i, BFs9i_BFu9i_BFs9i_BFs9i)
//============================================================================


struct  BFs9i_BFu9i_BFs9i_BFs9ll  {
  signed int v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9i_BFs9ll) C1{ Fi:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9i_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9i_BFs9ll, BFs9i_BFu9i_BFs9i_BFs9ll)
//============================================================================


struct  BFs9i_BFu9i_BFs9i_BFs9s  {
  signed int v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9i_BFs9s) C1{ Fi:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9i_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9i_BFs9s, BFs9i_BFu9i_BFs9i_BFs9s)
//============================================================================


struct  BFs9i_BFu9i_BFs9i_BFu9i  {
  signed int v1:9;
  unsigned int v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9i_BFu9i) C1{ Fi:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9i_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9i_BFu9i, BFs9i_BFu9i_BFs9i_BFu9i)
//============================================================================


struct  BFs9i_BFu9i_BFs9i_BFu9ll  {
  signed int v1:9;
  unsigned int v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9i_BFu9ll) C1{ Fi:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9i_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9i_BFu9ll, BFs9i_BFu9i_BFs9i_BFu9ll)
//============================================================================


struct  BFs9i_BFu9i_BFs9i_BFu9s  {
  signed int v1:9;
  unsigned int v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9i_BFu9s) C1{ Fi:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9i_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9i_BFu9s, BFs9i_BFu9i_BFs9i_BFu9s)
//============================================================================


struct  BFs9i_BFu9i_BFs9ll  {
  signed int v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9i_BFu9i_BFs9ll) C1{ Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9ll, BFs9i_BFu9i_BFs9ll)
//============================================================================


struct  BFs9i_BFu9i_BFs9ll_BFs9i  {
  signed int v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9ll_BFs9i) C1{ Fi:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9i_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9ll_BFs9i, BFs9i_BFu9i_BFs9ll_BFs9i)
//============================================================================


struct  BFs9i_BFu9i_BFs9ll_BFs9ll  {
  signed int v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9ll_BFs9ll) C1{ Fi:9 Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFu9i_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9ll_BFs9ll, BFs9i_BFu9i_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFu9i_BFs9ll_BFs9s  {
  signed int v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9ll_BFs9s) C1{ Fi:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9i_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9ll_BFs9s, BFs9i_BFu9i_BFs9ll_BFs9s)
//============================================================================


struct  BFs9i_BFu9i_BFs9ll_BFu9i  {
  signed int v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9ll_BFu9i) C1{ Fi:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9i_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9ll_BFu9i, BFs9i_BFu9i_BFs9ll_BFu9i)
//============================================================================


struct  BFs9i_BFu9i_BFs9ll_BFu9ll  {
  signed int v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9ll_BFu9ll) C1{ Fi:9 Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFu9i_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9ll_BFu9ll, BFs9i_BFu9i_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFu9i_BFs9ll_BFu9s  {
  signed int v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9ll_BFu9s) C1{ Fi:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9i_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9ll_BFu9s, BFs9i_BFu9i_BFs9ll_BFu9s)
//============================================================================


struct  BFs9i_BFu9i_BFs9s  {
  signed int v1:9;
  unsigned int v2:9;
  signed short v3:9;
};
//SIG(1 BFs9i_BFu9i_BFs9s) C1{ Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9s, BFs9i_BFu9i_BFs9s)
//============================================================================


struct  BFs9i_BFu9i_BFs9s_BFs9i  {
  signed int v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9s_BFs9i) C1{ Fi:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9i_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9s_BFs9i, BFs9i_BFu9i_BFs9s_BFs9i)
//============================================================================


struct  BFs9i_BFu9i_BFs9s_BFs9ll  {
  signed int v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9s_BFs9ll) C1{ Fi:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9s_BFs9ll, BFs9i_BFu9i_BFs9s_BFs9ll)
//============================================================================


struct  BFs9i_BFu9i_BFs9s_BFs9s  {
  signed int v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9s_BFs9s) C1{ Fi:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9s_BFs9s, BFs9i_BFu9i_BFs9s_BFs9s)
//============================================================================


struct  BFs9i_BFu9i_BFs9s_BFu9i  {
  signed int v1:9;
  unsigned int v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9s_BFu9i) C1{ Fi:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9s_BFu9i, BFs9i_BFu9i_BFs9s_BFu9i)
//============================================================================


struct  BFs9i_BFu9i_BFs9s_BFu9ll  {
  signed int v1:9;
  unsigned int v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9s_BFu9ll) C1{ Fi:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9s_BFu9ll, BFs9i_BFu9i_BFs9s_BFu9ll)
//============================================================================


struct  BFs9i_BFu9i_BFs9s_BFu9s  {
  signed int v1:9;
  unsigned int v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFs9s_BFu9s) C1{ Fi:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFs9s_BFu9s, BFs9i_BFu9i_BFs9s_BFu9s)
//============================================================================


struct  BFs9i_BFu9i_BFu9i  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9i_BFu9i_BFu9i) C1{ Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9i, BFs9i_BFu9i_BFu9i)
//============================================================================


struct  BFs9i_BFu9i_BFu9i_BFs9i  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9i_BFs9i) C1{ Fi:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9i_BFs9i, BFs9i_BFu9i_BFu9i_BFs9i)
//============================================================================


struct  BFs9i_BFu9i_BFu9i_BFs9ll  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9i_BFs9ll) C1{ Fi:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9i_BFs9ll, BFs9i_BFu9i_BFu9i_BFs9ll)
//============================================================================


struct  BFs9i_BFu9i_BFu9i_BFs9s  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9i_BFs9s) C1{ Fi:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9i_BFs9s, BFs9i_BFu9i_BFu9i_BFs9s)
//============================================================================


struct  BFs9i_BFu9i_BFu9i_BFu9i  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9i_BFu9i) C1{ Fi:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9i_BFu9i, BFs9i_BFu9i_BFu9i_BFu9i)
//============================================================================


struct  BFs9i_BFu9i_BFu9i_BFu9ll  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9i_BFu9ll) C1{ Fi:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9i_BFu9ll, BFs9i_BFu9i_BFu9i_BFu9ll)
//============================================================================


struct  BFs9i_BFu9i_BFu9i_BFu9s  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9i_BFu9s) C1{ Fi:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9i_BFu9s, BFs9i_BFu9i_BFu9i_BFu9s)
//============================================================================


struct  BFs9i_BFu9i_BFu9ll  {
  signed int v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9i_BFu9i_BFu9ll) C1{ Fi:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9ll, BFs9i_BFu9i_BFu9ll)
//============================================================================


struct  BFs9i_BFu9i_BFu9ll_BFs9i  {
  signed int v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9ll_BFs9i) C1{ Fi:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9ll_BFs9i, BFs9i_BFu9i_BFu9ll_BFs9i)
//============================================================================


struct  BFs9i_BFu9i_BFu9ll_BFs9ll  {
  signed int v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9ll_BFs9ll) C1{ Fi:9 Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFu9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9ll_BFs9ll, BFs9i_BFu9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFu9i_BFu9ll_BFs9s  {
  signed int v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9ll_BFs9s) C1{ Fi:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9ll_BFs9s, BFs9i_BFu9i_BFu9ll_BFs9s)
//============================================================================


struct  BFs9i_BFu9i_BFu9ll_BFu9i  {
  signed int v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9ll_BFu9i) C1{ Fi:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9ll_BFu9i, BFs9i_BFu9i_BFu9ll_BFu9i)
//============================================================================


struct  BFs9i_BFu9i_BFu9ll_BFu9ll  {
  signed int v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9ll_BFu9ll) C1{ Fi:9 Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFu9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9ll_BFu9ll, BFs9i_BFu9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFu9i_BFu9ll_BFu9s  {
  signed int v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9ll_BFu9s) C1{ Fi:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9ll_BFu9s, BFs9i_BFu9i_BFu9ll_BFu9s)
//============================================================================


struct  BFs9i_BFu9i_BFu9s  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9i_BFu9i_BFu9s) C1{ Fi:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9s, BFs9i_BFu9i_BFu9s)
//============================================================================


struct  BFs9i_BFu9i_BFu9s_BFs9i  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9s_BFs9i) C1{ Fi:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9s_BFs9i, BFs9i_BFu9i_BFu9s_BFs9i)
//============================================================================


struct  BFs9i_BFu9i_BFu9s_BFs9ll  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9s_BFs9ll) C1{ Fi:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9s_BFs9ll, BFs9i_BFu9i_BFu9s_BFs9ll)
//============================================================================


struct  BFs9i_BFu9i_BFu9s_BFs9s  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9s_BFs9s) C1{ Fi:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9s_BFs9s, BFs9i_BFu9i_BFu9s_BFs9s)
//============================================================================


struct  BFs9i_BFu9i_BFu9s_BFu9i  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9s_BFu9i) C1{ Fi:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9s_BFu9i, BFs9i_BFu9i_BFu9s_BFu9i)
//============================================================================


struct  BFs9i_BFu9i_BFu9s_BFu9ll  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9s_BFu9ll) C1{ Fi:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9s_BFu9ll, BFs9i_BFu9i_BFu9s_BFu9ll)
//============================================================================


struct  BFs9i_BFu9i_BFu9s_BFu9s  {
  signed int v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9i_BFu9s_BFu9s) C1{ Fi:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9i_BFu9s_BFu9s, BFs9i_BFu9i_BFu9s_BFu9s)
//============================================================================


struct  BFs9i_BFu9ll  {
  signed int v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFs9i_BFu9ll) C1{ Fi:9 FL:9}



static void Test_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll, BFs9i_BFu9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFs9i  {
  signed int v1:9;
  __tsu64 v2:9;
  signed int v3:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9i) C1{ Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9i, BFs9i_BFu9ll_BFs9i)
//============================================================================


struct  BFs9i_BFu9ll_BFs9i_BFs9i  {
  signed int v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9i_BFs9i) C1{ Fi:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9i_BFs9i, BFs9i_BFu9ll_BFs9i_BFs9i)
//============================================================================


struct  BFs9i_BFu9ll_BFs9i_BFs9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9i_BFs9ll) C1{ Fi:9 FL:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9i_BFs9ll, BFs9i_BFu9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFs9i_BFs9s  {
  signed int v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9i_BFs9s) C1{ Fi:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9i_BFs9s, BFs9i_BFu9ll_BFs9i_BFs9s)
//============================================================================


struct  BFs9i_BFu9ll_BFs9i_BFu9i  {
  signed int v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9i_BFu9i) C1{ Fi:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9i_BFu9i, BFs9i_BFu9ll_BFs9i_BFu9i)
//============================================================================


struct  BFs9i_BFu9ll_BFs9i_BFu9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9i_BFu9ll) C1{ Fi:9 FL:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9i_BFu9ll, BFs9i_BFu9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFs9i_BFu9s  {
  signed int v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9i_BFu9s) C1{ Fi:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9i_BFu9s, BFs9i_BFu9ll_BFs9i_BFu9s)
//============================================================================


struct  BFs9i_BFu9ll_BFs9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9ll) C1{ Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9ll, BFs9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFs9ll_BFs9i  {
  signed int v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9ll_BFs9i) C1{ Fi:9 FL:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9ll_BFs9i, BFs9i_BFu9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFs9i_BFu9ll_BFs9ll_BFs9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9ll_BFs9ll) C1{ Fi:9 FL:9 FL:9 FL:9}



static void Test_BFs9i_BFu9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9ll_BFs9ll, BFs9i_BFu9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFs9ll_BFs9s  {
  signed int v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9ll_BFs9s) C1{ Fi:9 FL:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9ll_BFs9s, BFs9i_BFu9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFs9i_BFu9ll_BFs9ll_BFu9i  {
  signed int v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9ll_BFu9i) C1{ Fi:9 FL:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9ll_BFu9i, BFs9i_BFu9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFs9i_BFu9ll_BFs9ll_BFu9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9ll_BFu9ll) C1{ Fi:9 FL:9 FL:9 FL:9}



static void Test_BFs9i_BFu9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9ll_BFu9ll, BFs9i_BFu9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFs9ll_BFu9s  {
  signed int v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9ll_BFu9s) C1{ Fi:9 FL:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9ll_BFu9s, BFs9i_BFu9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFs9i_BFu9ll_BFs9s  {
  signed int v1:9;
  __tsu64 v2:9;
  signed short v3:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9s) C1{ Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9s, BFs9i_BFu9ll_BFs9s)
//============================================================================


struct  BFs9i_BFu9ll_BFs9s_BFs9i  {
  signed int v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9s_BFs9i) C1{ Fi:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9s_BFs9i, BFs9i_BFu9ll_BFs9s_BFs9i)
//============================================================================


struct  BFs9i_BFu9ll_BFs9s_BFs9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9s_BFs9ll) C1{ Fi:9 FL:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9s_BFs9ll, BFs9i_BFu9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFs9s_BFs9s  {
  signed int v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9s_BFs9s) C1{ Fi:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9s_BFs9s, BFs9i_BFu9ll_BFs9s_BFs9s)
//============================================================================


struct  BFs9i_BFu9ll_BFs9s_BFu9i  {
  signed int v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9s_BFu9i) C1{ Fi:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9s_BFu9i, BFs9i_BFu9ll_BFs9s_BFu9i)
//============================================================================


struct  BFs9i_BFu9ll_BFs9s_BFu9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9s_BFu9ll) C1{ Fi:9 FL:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9s_BFu9ll, BFs9i_BFu9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFs9s_BFu9s  {
  signed int v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFs9s_BFu9s) C1{ Fi:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFs9s_BFu9s, BFs9i_BFu9ll_BFs9s_BFu9s)
//============================================================================


struct  BFs9i_BFu9ll_BFu9i  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9i) C1{ Fi:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9i, BFs9i_BFu9ll_BFu9i)
//============================================================================


struct  BFs9i_BFu9ll_BFu9i_BFs9i  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9i_BFs9i) C1{ Fi:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9i_BFs9i, BFs9i_BFu9ll_BFu9i_BFs9i)
//============================================================================


struct  BFs9i_BFu9ll_BFu9i_BFs9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9i_BFs9ll) C1{ Fi:9 FL:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9i_BFs9ll, BFs9i_BFu9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFu9i_BFs9s  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9i_BFs9s) C1{ Fi:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9i_BFs9s, BFs9i_BFu9ll_BFu9i_BFs9s)
//============================================================================


struct  BFs9i_BFu9ll_BFu9i_BFu9i  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9i_BFu9i) C1{ Fi:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9i_BFu9i, BFs9i_BFu9ll_BFu9i_BFu9i)
//============================================================================


struct  BFs9i_BFu9ll_BFu9i_BFu9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9i_BFu9ll) C1{ Fi:9 FL:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9i_BFu9ll, BFs9i_BFu9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFu9i_BFu9s  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9i_BFu9s) C1{ Fi:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9i_BFu9s, BFs9i_BFu9ll_BFu9i_BFu9s)
//============================================================================


struct  BFs9i_BFu9ll_BFu9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9ll) C1{ Fi:9 FL:9 FL:9}



static void Test_BFs9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9ll, BFs9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFu9ll_BFs9i  {
  signed int v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9ll_BFs9i) C1{ Fi:9 FL:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9ll_BFs9i, BFs9i_BFu9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFs9i_BFu9ll_BFu9ll_BFs9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9ll_BFs9ll) C1{ Fi:9 FL:9 FL:9 FL:9}



static void Test_BFs9i_BFu9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9ll_BFs9ll, BFs9i_BFu9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFu9ll_BFs9s  {
  signed int v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9ll_BFs9s) C1{ Fi:9 FL:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9ll_BFs9s, BFs9i_BFu9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFs9i_BFu9ll_BFu9ll_BFu9i  {
  signed int v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9ll_BFu9i) C1{ Fi:9 FL:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9ll_BFu9i, BFs9i_BFu9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFs9i_BFu9ll_BFu9ll_BFu9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9ll_BFu9ll) C1{ Fi:9 FL:9 FL:9 FL:9}



static void Test_BFs9i_BFu9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9ll_BFu9ll, BFs9i_BFu9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFu9ll_BFu9s  {
  signed int v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9ll_BFu9s) C1{ Fi:9 FL:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9ll_BFu9s, BFs9i_BFu9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFs9i_BFu9ll_BFu9s  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9s) C1{ Fi:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9s, BFs9i_BFu9ll_BFu9s)
//============================================================================


struct  BFs9i_BFu9ll_BFu9s_BFs9i  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9s_BFs9i) C1{ Fi:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9s_BFs9i, BFs9i_BFu9ll_BFu9s_BFs9i)
//============================================================================


struct  BFs9i_BFu9ll_BFu9s_BFs9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9s_BFs9ll) C1{ Fi:9 FL:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9s_BFs9ll, BFs9i_BFu9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFu9s_BFs9s  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9s_BFs9s) C1{ Fi:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9s_BFs9s, BFs9i_BFu9ll_BFu9s_BFs9s)
//============================================================================


struct  BFs9i_BFu9ll_BFu9s_BFu9i  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9s_BFu9i) C1{ Fi:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9s_BFu9i, BFs9i_BFu9ll_BFu9s_BFu9i)
//============================================================================


struct  BFs9i_BFu9ll_BFu9s_BFu9ll  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9s_BFu9ll) C1{ Fi:9 FL:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9s_BFu9ll, BFs9i_BFu9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFs9i_BFu9ll_BFu9s_BFu9s  {
  signed int v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9ll_BFu9s_BFu9s) C1{ Fi:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9i_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9ll_BFu9s_BFu9s, BFs9i_BFu9ll_BFu9s_BFu9s)
//============================================================================


struct  BFs9i_BFu9s  {
  signed int v1:9;
  unsigned short v2:9;
};
//SIG(1 BFs9i_BFu9s) C1{ Fi:9 Fs:9}



static void Test_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s, BFs9i_BFu9s)
//============================================================================


struct  BFs9i_BFu9s_BFs9i  {
  signed int v1:9;
  unsigned short v2:9;
  signed int v3:9;
};
//SIG(1 BFs9i_BFu9s_BFs9i) C1{ Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9i, BFs9i_BFu9s_BFs9i)
//============================================================================


struct  BFs9i_BFu9s_BFs9i_BFs9i  {
  signed int v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9i_BFs9i) C1{ Fi:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9i_BFs9i, BFs9i_BFu9s_BFs9i_BFs9i)
//============================================================================


struct  BFs9i_BFu9s_BFs9i_BFs9ll  {
  signed int v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9i_BFs9ll) C1{ Fi:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9i_BFs9ll, BFs9i_BFu9s_BFs9i_BFs9ll)
//============================================================================


struct  BFs9i_BFu9s_BFs9i_BFs9s  {
  signed int v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9i_BFs9s) C1{ Fi:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9i_BFs9s, BFs9i_BFu9s_BFs9i_BFs9s)
//============================================================================


struct  BFs9i_BFu9s_BFs9i_BFu9i  {
  signed int v1:9;
  unsigned short v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9i_BFu9i) C1{ Fi:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9i_BFu9i, BFs9i_BFu9s_BFs9i_BFu9i)
//============================================================================


struct  BFs9i_BFu9s_BFs9i_BFu9ll  {
  signed int v1:9;
  unsigned short v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9i_BFu9ll) C1{ Fi:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9i_BFu9ll, BFs9i_BFu9s_BFs9i_BFu9ll)
//============================================================================


struct  BFs9i_BFu9s_BFs9i_BFu9s  {
  signed int v1:9;
  unsigned short v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9i_BFu9s) C1{ Fi:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9i_BFu9s, BFs9i_BFu9s_BFs9i_BFu9s)
//============================================================================


struct  BFs9i_BFu9s_BFs9ll  {
  signed int v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9i_BFu9s_BFs9ll) C1{ Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9ll, BFs9i_BFu9s_BFs9ll)
//============================================================================


struct  BFs9i_BFu9s_BFs9ll_BFs9i  {
  signed int v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9ll_BFs9i) C1{ Fi:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9ll_BFs9i, BFs9i_BFu9s_BFs9ll_BFs9i)
//============================================================================


struct  BFs9i_BFu9s_BFs9ll_BFs9ll  {
  signed int v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9ll_BFs9ll) C1{ Fi:9 Fs:9 FL:9 FL:9}



static void Test_BFs9i_BFu9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9ll_BFs9ll, BFs9i_BFu9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFu9s_BFs9ll_BFs9s  {
  signed int v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9ll_BFs9s) C1{ Fi:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9ll_BFs9s, BFs9i_BFu9s_BFs9ll_BFs9s)
//============================================================================


struct  BFs9i_BFu9s_BFs9ll_BFu9i  {
  signed int v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9ll_BFu9i) C1{ Fi:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9ll_BFu9i, BFs9i_BFu9s_BFs9ll_BFu9i)
//============================================================================


struct  BFs9i_BFu9s_BFs9ll_BFu9ll  {
  signed int v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9ll_BFu9ll) C1{ Fi:9 Fs:9 FL:9 FL:9}



static void Test_BFs9i_BFu9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9ll_BFu9ll, BFs9i_BFu9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFu9s_BFs9ll_BFu9s  {
  signed int v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9ll_BFu9s) C1{ Fi:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9ll_BFu9s, BFs9i_BFu9s_BFs9ll_BFu9s)
//============================================================================


struct  BFs9i_BFu9s_BFs9s  {
  signed int v1:9;
  unsigned short v2:9;
  signed short v3:9;
};
//SIG(1 BFs9i_BFu9s_BFs9s) C1{ Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9s, BFs9i_BFu9s_BFs9s)
//============================================================================


struct  BFs9i_BFu9s_BFs9s_BFs9i  {
  signed int v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9s_BFs9i) C1{ Fi:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9s_BFs9i, BFs9i_BFu9s_BFs9s_BFs9i)
//============================================================================


struct  BFs9i_BFu9s_BFs9s_BFs9ll  {
  signed int v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9s_BFs9ll) C1{ Fi:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9s_BFs9ll, BFs9i_BFu9s_BFs9s_BFs9ll)
//============================================================================


struct  BFs9i_BFu9s_BFs9s_BFs9s  {
  signed int v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9s_BFs9s) C1{ Fi:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9s_BFs9s, BFs9i_BFu9s_BFs9s_BFs9s)
//============================================================================


struct  BFs9i_BFu9s_BFs9s_BFu9i  {
  signed int v1:9;
  unsigned short v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9s_BFu9i) C1{ Fi:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9s_BFu9i, BFs9i_BFu9s_BFs9s_BFu9i)
//============================================================================


struct  BFs9i_BFu9s_BFs9s_BFu9ll  {
  signed int v1:9;
  unsigned short v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9s_BFu9ll) C1{ Fi:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9s_BFu9ll, BFs9i_BFu9s_BFs9s_BFu9ll)
//============================================================================


struct  BFs9i_BFu9s_BFs9s_BFu9s  {
  signed int v1:9;
  unsigned short v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFs9s_BFu9s) C1{ Fi:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFs9s_BFu9s, BFs9i_BFu9s_BFs9s_BFu9s)
//============================================================================


struct  BFs9i_BFu9s_BFu9i  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9i_BFu9s_BFu9i) C1{ Fi:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9i, BFs9i_BFu9s_BFu9i)
//============================================================================


struct  BFs9i_BFu9s_BFu9i_BFs9i  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9i_BFs9i) C1{ Fi:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9i_BFs9i, BFs9i_BFu9s_BFu9i_BFs9i)
//============================================================================


struct  BFs9i_BFu9s_BFu9i_BFs9ll  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9i_BFs9ll) C1{ Fi:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9i_BFs9ll, BFs9i_BFu9s_BFu9i_BFs9ll)
//============================================================================


struct  BFs9i_BFu9s_BFu9i_BFs9s  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9i_BFs9s) C1{ Fi:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9i_BFs9s, BFs9i_BFu9s_BFu9i_BFs9s)
//============================================================================


struct  BFs9i_BFu9s_BFu9i_BFu9i  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9i_BFu9i) C1{ Fi:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9i_BFu9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9i_BFu9i, BFs9i_BFu9s_BFu9i_BFu9i)
//============================================================================


struct  BFs9i_BFu9s_BFu9i_BFu9ll  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9i_BFu9ll) C1{ Fi:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9i_BFu9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9i_BFu9ll, BFs9i_BFu9s_BFu9i_BFu9ll)
//============================================================================


struct  BFs9i_BFu9s_BFu9i_BFu9s  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9i_BFu9s) C1{ Fi:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9i_BFu9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9i_BFu9s, BFs9i_BFu9s_BFu9i_BFu9s)
//============================================================================


struct  BFs9i_BFu9s_BFu9ll  {
  signed int v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9i_BFu9s_BFu9ll) C1{ Fi:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9ll, BFs9i_BFu9s_BFu9ll)
//============================================================================


struct  BFs9i_BFu9s_BFu9ll_BFs9i  {
  signed int v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9ll_BFs9i) C1{ Fi:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9ll_BFs9i, BFs9i_BFu9s_BFu9ll_BFs9i)
//============================================================================


struct  BFs9i_BFu9s_BFu9ll_BFs9ll  {
  signed int v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9ll_BFs9ll) C1{ Fi:9 Fs:9 FL:9 FL:9}



static void Test_BFs9i_BFu9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9ll_BFs9ll, BFs9i_BFu9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9i_BFu9s_BFu9ll_BFs9s  {
  signed int v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9ll_BFs9s) C1{ Fi:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9ll_BFs9s, BFs9i_BFu9s_BFu9ll_BFs9s)
//============================================================================


struct  BFs9i_BFu9s_BFu9ll_BFu9i  {
  signed int v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9ll_BFu9i) C1{ Fi:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9i_BFu9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9ll_BFu9i, BFs9i_BFu9s_BFu9ll_BFu9i)
//============================================================================


struct  BFs9i_BFu9s_BFu9ll_BFu9ll  {
  signed int v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9ll_BFu9ll) C1{ Fi:9 Fs:9 FL:9 FL:9}



static void Test_BFs9i_BFu9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9ll_BFu9ll, BFs9i_BFu9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9i_BFu9s_BFu9ll_BFu9s  {
  signed int v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9ll_BFu9s) C1{ Fi:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9i_BFu9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9i_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9ll_BFu9s, BFs9i_BFu9s_BFu9ll_BFu9s)
//============================================================================


struct  BFs9i_BFu9s_BFu9s  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9i_BFu9s_BFu9s) C1{ Fi:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9s, BFs9i_BFu9s_BFu9s)
//============================================================================


struct  BFs9i_BFu9s_BFu9s_BFs9i  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9s_BFs9i) C1{ Fi:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9s_BFs9i, BFs9i_BFu9s_BFu9s_BFs9i)
//============================================================================


struct  BFs9i_BFu9s_BFu9s_BFs9ll  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9s_BFs9ll) C1{ Fi:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9s_BFs9ll, BFs9i_BFu9s_BFu9s_BFs9ll)
//============================================================================


struct  BFs9i_BFu9s_BFu9s_BFs9s  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9s_BFs9s) C1{ Fi:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9s_BFs9s, BFs9i_BFu9s_BFu9s_BFs9s)
//============================================================================


struct  BFs9i_BFu9s_BFu9s_BFu9i  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9s_BFu9i) C1{ Fi:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9i_BFu9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9s_BFu9i, BFs9i_BFu9s_BFu9s_BFu9i)
//============================================================================


struct  BFs9i_BFu9s_BFu9s_BFu9ll  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9s_BFu9ll) C1{ Fi:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9i_BFu9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9i_BFu9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9s_BFu9ll, BFs9i_BFu9s_BFu9s_BFu9ll)
//============================================================================


struct  BFs9i_BFu9s_BFu9s_BFu9s  {
  signed int v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9i_BFu9s_BFu9s_BFu9s) C1{ Fi:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9i_BFu9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9i_BFu9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9i_BFu9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9i_BFu9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9i_BFu9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9i_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9i_BFu9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9i_BFu9s_BFu9s_BFu9s, BFs9i_BFu9s_BFu9s_BFu9s)
//============================================================================


struct  BFs9ll_BFs9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
};
//SIG(1 BFs9ll_BFs9i) C1{ FL:9 Fi:9}



static void Test_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i, BFs9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFs9i_BFs9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed int v3:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9i) C1{ FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9i, BFs9ll_BFs9i_BFs9i)
//============================================================================


struct  BFs9ll_BFs9i_BFs9i_BFs9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9i_BFs9i) C1{ FL:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9i_BFs9i, BFs9ll_BFs9i_BFs9i_BFs9i)
//============================================================================


struct  BFs9ll_BFs9i_BFs9i_BFs9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9i_BFs9ll) C1{ FL:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9i_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9i_BFs9ll, BFs9ll_BFs9i_BFs9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFs9i_BFs9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9i_BFs9s) C1{ FL:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9i_BFs9s, BFs9ll_BFs9i_BFs9i_BFs9s)
//============================================================================


struct  BFs9ll_BFs9i_BFs9i_BFu9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9i_BFu9i) C1{ FL:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9i_BFu9i, BFs9ll_BFs9i_BFs9i_BFu9i)
//============================================================================


struct  BFs9ll_BFs9i_BFs9i_BFu9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9i_BFu9ll) C1{ FL:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9i_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9i_BFu9ll, BFs9ll_BFs9i_BFs9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFs9i_BFu9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9i_BFu9s) C1{ FL:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9i_BFu9s, BFs9ll_BFs9i_BFs9i_BFu9s)
//============================================================================


struct  BFs9ll_BFs9i_BFs9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9ll) C1{ FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9ll, BFs9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFs9ll_BFs9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9ll_BFs9i) C1{ FL:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9ll_BFs9i, BFs9ll_BFs9i_BFs9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFs9i_BFs9ll_BFs9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9ll_BFs9ll) C1{ FL:9 Fi:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9i_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9ll_BFs9ll, BFs9ll_BFs9i_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFs9ll_BFs9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9ll_BFs9s) C1{ FL:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9ll_BFs9s, BFs9ll_BFs9i_BFs9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFs9i_BFs9ll_BFu9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9ll_BFu9i) C1{ FL:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9ll_BFu9i, BFs9ll_BFs9i_BFs9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFs9i_BFs9ll_BFu9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9ll_BFu9ll) C1{ FL:9 Fi:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9i_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9ll_BFu9ll, BFs9ll_BFs9i_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFs9ll_BFu9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9ll_BFu9s) C1{ FL:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9ll_BFu9s, BFs9ll_BFs9i_BFs9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFs9i_BFs9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed short v3:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9s) C1{ FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9s, BFs9ll_BFs9i_BFs9s)
//============================================================================


struct  BFs9ll_BFs9i_BFs9s_BFs9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9s_BFs9i) C1{ FL:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9s_BFs9i, BFs9ll_BFs9i_BFs9s_BFs9i)
//============================================================================


struct  BFs9ll_BFs9i_BFs9s_BFs9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9s_BFs9ll) C1{ FL:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9s_BFs9ll, BFs9ll_BFs9i_BFs9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFs9s_BFs9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9s_BFs9s) C1{ FL:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9s_BFs9s, BFs9ll_BFs9i_BFs9s_BFs9s)
//============================================================================


struct  BFs9ll_BFs9i_BFs9s_BFu9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9s_BFu9i) C1{ FL:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9s_BFu9i, BFs9ll_BFs9i_BFs9s_BFu9i)
//============================================================================


struct  BFs9ll_BFs9i_BFs9s_BFu9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9s_BFu9ll) C1{ FL:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9s_BFu9ll, BFs9ll_BFs9i_BFs9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFs9s_BFu9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFs9s_BFu9s) C1{ FL:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFs9s_BFu9s, BFs9ll_BFs9i_BFs9s_BFu9s)
//============================================================================


struct  BFs9ll_BFs9i_BFu9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9i) C1{ FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9i, BFs9ll_BFs9i_BFu9i)
//============================================================================


struct  BFs9ll_BFs9i_BFu9i_BFs9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9i_BFs9i) C1{ FL:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9i_BFs9i, BFs9ll_BFs9i_BFu9i_BFs9i)
//============================================================================


struct  BFs9ll_BFs9i_BFu9i_BFs9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9i_BFs9ll) C1{ FL:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9i_BFs9ll, BFs9ll_BFs9i_BFu9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFu9i_BFs9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9i_BFs9s) C1{ FL:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9i_BFs9s, BFs9ll_BFs9i_BFu9i_BFs9s)
//============================================================================


struct  BFs9ll_BFs9i_BFu9i_BFu9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9i_BFu9i) C1{ FL:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9i_BFu9i, BFs9ll_BFs9i_BFu9i_BFu9i)
//============================================================================


struct  BFs9ll_BFs9i_BFu9i_BFu9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9i_BFu9ll) C1{ FL:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9i_BFu9ll, BFs9ll_BFs9i_BFu9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFu9i_BFu9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9i_BFu9s) C1{ FL:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9i_BFu9s, BFs9ll_BFs9i_BFu9i_BFu9s)
//============================================================================


struct  BFs9ll_BFs9i_BFu9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9ll) C1{ FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9ll, BFs9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFu9ll_BFs9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9ll_BFs9i) C1{ FL:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9ll_BFs9i, BFs9ll_BFs9i_BFu9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFs9i_BFu9ll_BFs9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9ll_BFs9ll) C1{ FL:9 Fi:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9ll_BFs9ll, BFs9ll_BFs9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFu9ll_BFs9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9ll_BFs9s) C1{ FL:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9ll_BFs9s, BFs9ll_BFs9i_BFu9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFs9i_BFu9ll_BFu9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9ll_BFu9i) C1{ FL:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9ll_BFu9i, BFs9ll_BFs9i_BFu9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFs9i_BFu9ll_BFu9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9ll_BFu9ll) C1{ FL:9 Fi:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9ll_BFu9ll, BFs9ll_BFs9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFu9ll_BFu9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9ll_BFu9s) C1{ FL:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9ll_BFu9s, BFs9ll_BFs9i_BFu9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFs9i_BFu9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9s) C1{ FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9s, BFs9ll_BFs9i_BFu9s)
//============================================================================


struct  BFs9ll_BFs9i_BFu9s_BFs9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9s_BFs9i) C1{ FL:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9s_BFs9i, BFs9ll_BFs9i_BFu9s_BFs9i)
//============================================================================


struct  BFs9ll_BFs9i_BFu9s_BFs9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9s_BFs9ll) C1{ FL:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9s_BFs9ll, BFs9ll_BFs9i_BFu9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFu9s_BFs9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9s_BFs9s) C1{ FL:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9s_BFs9s, BFs9ll_BFs9i_BFu9s_BFs9s)
//============================================================================


struct  BFs9ll_BFs9i_BFu9s_BFu9i  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9s_BFu9i) C1{ FL:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9s_BFu9i, BFs9ll_BFs9i_BFu9s_BFu9i)
//============================================================================


struct  BFs9ll_BFs9i_BFu9s_BFu9ll  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9s_BFu9ll) C1{ FL:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9s_BFu9ll, BFs9ll_BFs9i_BFu9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9i_BFu9s_BFu9s  {
  signed __tsi64 v1:9;
  signed int v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9i_BFu9s_BFu9s) C1{ FL:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9i_BFu9s_BFu9s, BFs9ll_BFs9i_BFu9s_BFu9s)
//============================================================================


struct  BFs9ll_BFs9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
};
//SIG(1 BFs9ll_BFs9ll) C1{ FL:9 FL:9}



static void Test_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll, BFs9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9i) C1{ FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9i, BFs9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9i_BFs9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9i_BFs9i) C1{ FL:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9i_BFs9i, BFs9ll_BFs9ll_BFs9i_BFs9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9i_BFs9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9i_BFs9ll) C1{ FL:9 FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9i_BFs9ll, BFs9ll_BFs9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9i_BFs9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9i_BFs9s) C1{ FL:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9i_BFs9s, BFs9ll_BFs9ll_BFs9i_BFs9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9i_BFu9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9i_BFu9i) C1{ FL:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9i_BFu9i, BFs9ll_BFs9ll_BFs9i_BFu9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9i_BFu9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9i_BFu9ll) C1{ FL:9 FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9i_BFu9ll, BFs9ll_BFs9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9i_BFu9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9i_BFu9s) C1{ FL:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9i_BFu9s, BFs9ll_BFs9ll_BFs9i_BFu9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9ll) C1{ FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9ll, BFs9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9ll_BFs9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9ll_BFs9i) C1{ FL:9 FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9ll_BFs9i, BFs9ll_BFs9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9ll_BFs9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9ll_BFs9ll) C1{ FL:9 FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9ll_BFs9ll, BFs9ll_BFs9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9ll_BFs9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9ll_BFs9s) C1{ FL:9 FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9ll_BFs9s, BFs9ll_BFs9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9ll_BFu9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9ll_BFu9i) C1{ FL:9 FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9ll_BFu9i, BFs9ll_BFs9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9ll_BFu9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9ll_BFu9ll) C1{ FL:9 FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9ll_BFu9ll, BFs9ll_BFs9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9ll_BFu9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9ll_BFu9s) C1{ FL:9 FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9ll_BFu9s, BFs9ll_BFs9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9s) C1{ FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9s, BFs9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9s_BFs9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9s_BFs9i) C1{ FL:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9s_BFs9i, BFs9ll_BFs9ll_BFs9s_BFs9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9s_BFs9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9s_BFs9ll) C1{ FL:9 FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9s_BFs9ll, BFs9ll_BFs9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9s_BFs9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9s_BFs9s) C1{ FL:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9s_BFs9s, BFs9ll_BFs9ll_BFs9s_BFs9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9s_BFu9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9s_BFu9i) C1{ FL:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9s_BFu9i, BFs9ll_BFs9ll_BFs9s_BFu9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9s_BFu9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9s_BFu9ll) C1{ FL:9 FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9s_BFu9ll, BFs9ll_BFs9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFs9s_BFu9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFs9s_BFu9s) C1{ FL:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFs9s_BFu9s, BFs9ll_BFs9ll_BFs9s_BFu9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9i) C1{ FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9i, BFs9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9i_BFs9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9i_BFs9i) C1{ FL:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9i_BFs9i, BFs9ll_BFs9ll_BFu9i_BFs9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9i_BFs9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9i_BFs9ll) C1{ FL:9 FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9i_BFs9ll, BFs9ll_BFs9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9i_BFs9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9i_BFs9s) C1{ FL:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9i_BFs9s, BFs9ll_BFs9ll_BFu9i_BFs9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9i_BFu9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9i_BFu9i) C1{ FL:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9i_BFu9i, BFs9ll_BFs9ll_BFu9i_BFu9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9i_BFu9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9i_BFu9ll) C1{ FL:9 FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9i_BFu9ll, BFs9ll_BFs9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9i_BFu9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9i_BFu9s) C1{ FL:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9i_BFu9s, BFs9ll_BFs9ll_BFu9i_BFu9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9ll) C1{ FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9ll, BFs9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9ll_BFs9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9ll_BFs9i) C1{ FL:9 FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9ll_BFs9i, BFs9ll_BFs9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9ll_BFs9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9ll_BFs9ll) C1{ FL:9 FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9ll_BFs9ll, BFs9ll_BFs9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9ll_BFs9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9ll_BFs9s) C1{ FL:9 FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9ll_BFs9s, BFs9ll_BFs9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9ll_BFu9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9ll_BFu9i) C1{ FL:9 FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9ll_BFu9i, BFs9ll_BFs9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9ll_BFu9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9ll_BFu9ll) C1{ FL:9 FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9ll_BFu9ll, BFs9ll_BFs9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9ll_BFu9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9ll_BFu9s) C1{ FL:9 FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9ll_BFu9s, BFs9ll_BFs9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9s) C1{ FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9s, BFs9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9s_BFs9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9s_BFs9i) C1{ FL:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9s_BFs9i, BFs9ll_BFs9ll_BFu9s_BFs9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9s_BFs9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9s_BFs9ll) C1{ FL:9 FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9s_BFs9ll, BFs9ll_BFs9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9s_BFs9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9s_BFs9s) C1{ FL:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9s_BFs9s, BFs9ll_BFs9ll_BFu9s_BFs9s)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9s_BFu9i  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9s_BFu9i) C1{ FL:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9s_BFu9i, BFs9ll_BFs9ll_BFu9s_BFu9i)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9s_BFu9ll  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9s_BFu9ll) C1{ FL:9 FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9s_BFu9ll, BFs9ll_BFs9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9ll_BFu9s_BFu9s  {
  signed __tsi64 v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9ll_BFu9s_BFu9s) C1{ FL:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9ll_BFu9s_BFu9s, BFs9ll_BFs9ll_BFu9s_BFu9s)
//============================================================================


struct  BFs9ll_BFs9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
};
//SIG(1 BFs9ll_BFs9s) C1{ FL:9 Fs:9}



static void Test_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s, BFs9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFs9s_BFs9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed int v3:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9i) C1{ FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9i, BFs9ll_BFs9s_BFs9i)
//============================================================================


struct  BFs9ll_BFs9s_BFs9i_BFs9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9i_BFs9i) C1{ FL:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9i_BFs9i, BFs9ll_BFs9s_BFs9i_BFs9i)
//============================================================================


struct  BFs9ll_BFs9s_BFs9i_BFs9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9i_BFs9ll) C1{ FL:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9i_BFs9ll, BFs9ll_BFs9s_BFs9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFs9i_BFs9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9i_BFs9s) C1{ FL:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9i_BFs9s, BFs9ll_BFs9s_BFs9i_BFs9s)
//============================================================================


struct  BFs9ll_BFs9s_BFs9i_BFu9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9i_BFu9i) C1{ FL:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9i_BFu9i, BFs9ll_BFs9s_BFs9i_BFu9i)
//============================================================================


struct  BFs9ll_BFs9s_BFs9i_BFu9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9i_BFu9ll) C1{ FL:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9i_BFu9ll, BFs9ll_BFs9s_BFs9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFs9i_BFu9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9i_BFu9s) C1{ FL:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9i_BFu9s, BFs9ll_BFs9s_BFs9i_BFu9s)
//============================================================================


struct  BFs9ll_BFs9s_BFs9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9ll) C1{ FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9ll, BFs9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFs9ll_BFs9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9ll_BFs9i) C1{ FL:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9ll_BFs9i, BFs9ll_BFs9s_BFs9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFs9s_BFs9ll_BFs9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9ll_BFs9ll) C1{ FL:9 Fs:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9ll_BFs9ll, BFs9ll_BFs9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFs9ll_BFs9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9ll_BFs9s) C1{ FL:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9ll_BFs9s, BFs9ll_BFs9s_BFs9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFs9s_BFs9ll_BFu9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9ll_BFu9i) C1{ FL:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9ll_BFu9i, BFs9ll_BFs9s_BFs9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFs9s_BFs9ll_BFu9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9ll_BFu9ll) C1{ FL:9 Fs:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9ll_BFu9ll, BFs9ll_BFs9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFs9ll_BFu9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9ll_BFu9s) C1{ FL:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9ll_BFu9s, BFs9ll_BFs9s_BFs9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFs9s_BFs9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed short v3:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9s) C1{ FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9s, BFs9ll_BFs9s_BFs9s)
//============================================================================


struct  BFs9ll_BFs9s_BFs9s_BFs9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9s_BFs9i) C1{ FL:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9s_BFs9i, BFs9ll_BFs9s_BFs9s_BFs9i)
//============================================================================


struct  BFs9ll_BFs9s_BFs9s_BFs9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9s_BFs9ll) C1{ FL:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9s_BFs9ll, BFs9ll_BFs9s_BFs9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFs9s_BFs9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9s_BFs9s) C1{ FL:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9s_BFs9s, BFs9ll_BFs9s_BFs9s_BFs9s)
//============================================================================


struct  BFs9ll_BFs9s_BFs9s_BFu9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9s_BFu9i) C1{ FL:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9s_BFu9i, BFs9ll_BFs9s_BFs9s_BFu9i)
//============================================================================


struct  BFs9ll_BFs9s_BFs9s_BFu9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9s_BFu9ll) C1{ FL:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9s_BFu9ll, BFs9ll_BFs9s_BFs9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFs9s_BFu9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFs9s_BFu9s) C1{ FL:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFs9s_BFu9s, BFs9ll_BFs9s_BFs9s_BFu9s)
//============================================================================


struct  BFs9ll_BFs9s_BFu9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9i) C1{ FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9i, BFs9ll_BFs9s_BFu9i)
//============================================================================


struct  BFs9ll_BFs9s_BFu9i_BFs9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9i_BFs9i) C1{ FL:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9i_BFs9i, BFs9ll_BFs9s_BFu9i_BFs9i)
//============================================================================


struct  BFs9ll_BFs9s_BFu9i_BFs9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9i_BFs9ll) C1{ FL:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9i_BFs9ll, BFs9ll_BFs9s_BFu9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFu9i_BFs9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9i_BFs9s) C1{ FL:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9i_BFs9s, BFs9ll_BFs9s_BFu9i_BFs9s)
//============================================================================


struct  BFs9ll_BFs9s_BFu9i_BFu9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9i_BFu9i) C1{ FL:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9i_BFu9i, BFs9ll_BFs9s_BFu9i_BFu9i)
//============================================================================


struct  BFs9ll_BFs9s_BFu9i_BFu9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9i_BFu9ll) C1{ FL:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9ll_BFs9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9i_BFu9ll, BFs9ll_BFs9s_BFu9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFu9i_BFu9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9i_BFu9s) C1{ FL:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9i_BFu9s, BFs9ll_BFs9s_BFu9i_BFu9s)
//============================================================================


struct  BFs9ll_BFs9s_BFu9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9ll) C1{ FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9ll, BFs9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFu9ll_BFs9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9ll_BFs9i) C1{ FL:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9ll_BFs9i, BFs9ll_BFs9s_BFu9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFs9s_BFu9ll_BFs9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9ll_BFs9ll) C1{ FL:9 Fs:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9ll_BFs9ll, BFs9ll_BFs9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFu9ll_BFs9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9ll_BFs9s) C1{ FL:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9ll_BFs9s, BFs9ll_BFs9s_BFu9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFs9s_BFu9ll_BFu9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9ll_BFu9i) C1{ FL:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9ll_BFu9i, BFs9ll_BFs9s_BFu9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFs9s_BFu9ll_BFu9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9ll_BFu9ll) C1{ FL:9 Fs:9 FL:9 FL:9}



static void Test_BFs9ll_BFs9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9ll_BFu9ll, BFs9ll_BFs9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFu9ll_BFu9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9ll_BFu9s) C1{ FL:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9ll_BFu9s, BFs9ll_BFs9s_BFu9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFs9s_BFu9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9s) C1{ FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9s, BFs9ll_BFs9s_BFu9s)
//============================================================================


struct  BFs9ll_BFs9s_BFu9s_BFs9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9s_BFs9i) C1{ FL:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9s_BFs9i, BFs9ll_BFs9s_BFu9s_BFs9i)
//============================================================================


struct  BFs9ll_BFs9s_BFu9s_BFs9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9s_BFs9ll) C1{ FL:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9s_BFs9ll, BFs9ll_BFs9s_BFu9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFu9s_BFs9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9s_BFs9s) C1{ FL:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9s_BFs9s, BFs9ll_BFs9s_BFu9s_BFs9s)
//============================================================================


struct  BFs9ll_BFs9s_BFu9s_BFu9i  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9s_BFu9i) C1{ FL:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFs9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9s_BFu9i, BFs9ll_BFs9s_BFu9s_BFu9i)
//============================================================================


struct  BFs9ll_BFs9s_BFu9s_BFu9ll  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9s_BFu9ll) C1{ FL:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9ll_BFs9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9s_BFu9ll, BFs9ll_BFs9s_BFu9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFs9s_BFu9s_BFu9s  {
  signed __tsi64 v1:9;
  signed short v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFs9s_BFu9s_BFu9s) C1{ FL:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFs9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFs9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFs9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFs9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFs9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFs9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFs9s_BFu9s_BFu9s, BFs9ll_BFs9s_BFu9s_BFu9s)
//============================================================================


struct  BFs9ll_BFu9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
};
//SIG(1 BFs9ll_BFu9i) C1{ FL:9 Fi:9}



static void Test_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i, BFs9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFu9i_BFs9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed int v3:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9i) C1{ FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9i, BFs9ll_BFu9i_BFs9i)
//============================================================================


struct  BFs9ll_BFu9i_BFs9i_BFs9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9i_BFs9i) C1{ FL:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9i_BFs9i, BFs9ll_BFu9i_BFs9i_BFs9i)
//============================================================================


struct  BFs9ll_BFu9i_BFs9i_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9i_BFs9ll) C1{ FL:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9i_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9i_BFs9ll, BFs9ll_BFu9i_BFs9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFs9i_BFs9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9i_BFs9s) C1{ FL:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9i_BFs9s, BFs9ll_BFu9i_BFs9i_BFs9s)
//============================================================================


struct  BFs9ll_BFu9i_BFs9i_BFu9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9i_BFu9i) C1{ FL:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9i_BFu9i, BFs9ll_BFu9i_BFs9i_BFu9i)
//============================================================================


struct  BFs9ll_BFu9i_BFs9i_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9i_BFu9ll) C1{ FL:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9i_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9i_BFu9ll, BFs9ll_BFu9i_BFs9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFs9i_BFu9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9i_BFu9s) C1{ FL:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9i_BFu9s, BFs9ll_BFu9i_BFs9i_BFu9s)
//============================================================================


struct  BFs9ll_BFu9i_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9ll) C1{ FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9ll, BFs9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFs9ll_BFs9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9ll_BFs9i) C1{ FL:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9ll_BFs9i, BFs9ll_BFu9i_BFs9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFu9i_BFs9ll_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9ll_BFs9ll) C1{ FL:9 Fi:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9i_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9ll_BFs9ll, BFs9ll_BFu9i_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFs9ll_BFs9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9ll_BFs9s) C1{ FL:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9ll_BFs9s, BFs9ll_BFu9i_BFs9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFu9i_BFs9ll_BFu9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9ll_BFu9i) C1{ FL:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9ll_BFu9i, BFs9ll_BFu9i_BFs9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFu9i_BFs9ll_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9ll_BFu9ll) C1{ FL:9 Fi:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9i_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9ll_BFu9ll, BFs9ll_BFu9i_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFs9ll_BFu9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9ll_BFu9s) C1{ FL:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9ll_BFu9s, BFs9ll_BFu9i_BFs9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFu9i_BFs9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed short v3:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9s) C1{ FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9s, BFs9ll_BFu9i_BFs9s)
//============================================================================


struct  BFs9ll_BFu9i_BFs9s_BFs9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9s_BFs9i) C1{ FL:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9s_BFs9i, BFs9ll_BFu9i_BFs9s_BFs9i)
//============================================================================


struct  BFs9ll_BFu9i_BFs9s_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9s_BFs9ll) C1{ FL:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9s_BFs9ll, BFs9ll_BFu9i_BFs9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFs9s_BFs9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9s_BFs9s) C1{ FL:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9s_BFs9s, BFs9ll_BFu9i_BFs9s_BFs9s)
//============================================================================


struct  BFs9ll_BFu9i_BFs9s_BFu9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9s_BFu9i) C1{ FL:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9s_BFu9i, BFs9ll_BFu9i_BFs9s_BFu9i)
//============================================================================


struct  BFs9ll_BFu9i_BFs9s_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9s_BFu9ll) C1{ FL:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9s_BFu9ll, BFs9ll_BFu9i_BFs9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFs9s_BFu9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFs9s_BFu9s) C1{ FL:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFs9s_BFu9s, BFs9ll_BFu9i_BFs9s_BFu9s)
//============================================================================


struct  BFs9ll_BFu9i_BFu9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9i) C1{ FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9i, BFs9ll_BFu9i_BFu9i)
//============================================================================


struct  BFs9ll_BFu9i_BFu9i_BFs9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9i_BFs9i) C1{ FL:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9i_BFs9i, BFs9ll_BFu9i_BFu9i_BFs9i)
//============================================================================


struct  BFs9ll_BFu9i_BFu9i_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9i_BFs9ll) C1{ FL:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9i_BFs9ll, BFs9ll_BFu9i_BFu9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFu9i_BFs9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9i_BFs9s) C1{ FL:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9i_BFs9s, BFs9ll_BFu9i_BFu9i_BFs9s)
//============================================================================


struct  BFs9ll_BFu9i_BFu9i_BFu9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9i_BFu9i) C1{ FL:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9i_BFu9i, BFs9ll_BFu9i_BFu9i_BFu9i)
//============================================================================


struct  BFs9ll_BFu9i_BFu9i_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9i_BFu9ll) C1{ FL:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9i_BFu9ll, BFs9ll_BFu9i_BFu9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFu9i_BFu9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9i_BFu9s) C1{ FL:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9i_BFu9s, BFs9ll_BFu9i_BFu9i_BFu9s)
//============================================================================


struct  BFs9ll_BFu9i_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9ll) C1{ FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9ll, BFs9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFu9ll_BFs9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9ll_BFs9i) C1{ FL:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9ll_BFs9i, BFs9ll_BFu9i_BFu9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFu9i_BFu9ll_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9ll_BFs9ll) C1{ FL:9 Fi:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9ll_BFs9ll, BFs9ll_BFu9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFu9ll_BFs9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9ll_BFs9s) C1{ FL:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9ll_BFs9s, BFs9ll_BFu9i_BFu9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFu9i_BFu9ll_BFu9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9ll_BFu9i) C1{ FL:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9ll_BFu9i, BFs9ll_BFu9i_BFu9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFu9i_BFu9ll_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9ll_BFu9ll) C1{ FL:9 Fi:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9ll_BFu9ll, BFs9ll_BFu9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFu9ll_BFu9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9ll_BFu9s) C1{ FL:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9ll_BFu9s, BFs9ll_BFu9i_BFu9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFu9i_BFu9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9s) C1{ FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9s, BFs9ll_BFu9i_BFu9s)
//============================================================================


struct  BFs9ll_BFu9i_BFu9s_BFs9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9s_BFs9i) C1{ FL:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9s_BFs9i, BFs9ll_BFu9i_BFu9s_BFs9i)
//============================================================================


struct  BFs9ll_BFu9i_BFu9s_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9s_BFs9ll) C1{ FL:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9s_BFs9ll, BFs9ll_BFu9i_BFu9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFu9s_BFs9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9s_BFs9s) C1{ FL:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9s_BFs9s, BFs9ll_BFu9i_BFu9s_BFs9s)
//============================================================================


struct  BFs9ll_BFu9i_BFu9s_BFu9i  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9s_BFu9i) C1{ FL:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9s_BFu9i, BFs9ll_BFu9i_BFu9s_BFu9i)
//============================================================================


struct  BFs9ll_BFu9i_BFu9s_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9s_BFu9ll) C1{ FL:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9s_BFu9ll, BFs9ll_BFu9i_BFu9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9i_BFu9s_BFu9s  {
  signed __tsi64 v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9i_BFu9s_BFu9s) C1{ FL:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9i_BFu9s_BFu9s, BFs9ll_BFu9i_BFu9s_BFu9s)
//============================================================================


struct  BFs9ll_BFu9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFs9ll_BFu9ll) C1{ FL:9 FL:9}



static void Test_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll, BFs9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed int v3:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9i) C1{ FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9i, BFs9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9i_BFs9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9i_BFs9i) C1{ FL:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9i_BFs9i, BFs9ll_BFu9ll_BFs9i_BFs9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9i_BFs9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9i_BFs9ll) C1{ FL:9 FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9i_BFs9ll, BFs9ll_BFu9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9i_BFs9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9i_BFs9s) C1{ FL:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9i_BFs9s, BFs9ll_BFu9ll_BFs9i_BFs9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9i_BFu9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9i_BFu9i) C1{ FL:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9i_BFu9i, BFs9ll_BFu9ll_BFs9i_BFu9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9i_BFu9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9i_BFu9ll) C1{ FL:9 FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9i_BFu9ll, BFs9ll_BFu9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9i_BFu9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9i_BFu9s) C1{ FL:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9i_BFu9s, BFs9ll_BFu9ll_BFs9i_BFu9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9ll) C1{ FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9ll, BFs9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9ll_BFs9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9ll_BFs9i) C1{ FL:9 FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9ll_BFs9i, BFs9ll_BFu9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9ll_BFs9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9ll_BFs9ll) C1{ FL:9 FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9ll_BFs9ll, BFs9ll_BFu9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9ll_BFs9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9ll_BFs9s) C1{ FL:9 FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9ll_BFs9s, BFs9ll_BFu9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9ll_BFu9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9ll_BFu9i) C1{ FL:9 FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9ll_BFu9i, BFs9ll_BFu9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9ll_BFu9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9ll_BFu9ll) C1{ FL:9 FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9ll_BFu9ll, BFs9ll_BFu9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9ll_BFu9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9ll_BFu9s) C1{ FL:9 FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9ll_BFu9s, BFs9ll_BFu9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed short v3:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9s) C1{ FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9s, BFs9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9s_BFs9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9s_BFs9i) C1{ FL:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9s_BFs9i, BFs9ll_BFu9ll_BFs9s_BFs9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9s_BFs9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9s_BFs9ll) C1{ FL:9 FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9s_BFs9ll, BFs9ll_BFu9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9s_BFs9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9s_BFs9s) C1{ FL:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9s_BFs9s, BFs9ll_BFu9ll_BFs9s_BFs9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9s_BFu9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9s_BFu9i) C1{ FL:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9s_BFu9i, BFs9ll_BFu9ll_BFs9s_BFu9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9s_BFu9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9s_BFu9ll) C1{ FL:9 FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9s_BFu9ll, BFs9ll_BFu9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFs9s_BFu9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFs9s_BFu9s) C1{ FL:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFs9s_BFu9s, BFs9ll_BFu9ll_BFs9s_BFu9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9i) C1{ FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9i, BFs9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9i_BFs9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9i_BFs9i) C1{ FL:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9i_BFs9i, BFs9ll_BFu9ll_BFu9i_BFs9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9i_BFs9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9i_BFs9ll) C1{ FL:9 FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9i_BFs9ll, BFs9ll_BFu9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9i_BFs9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9i_BFs9s) C1{ FL:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9i_BFs9s, BFs9ll_BFu9ll_BFu9i_BFs9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9i_BFu9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9i_BFu9i) C1{ FL:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9i_BFu9i, BFs9ll_BFu9ll_BFu9i_BFu9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9i_BFu9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9i_BFu9ll) C1{ FL:9 FL:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9i_BFu9ll, BFs9ll_BFu9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9i_BFu9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9i_BFu9s) C1{ FL:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9i_BFu9s, BFs9ll_BFu9ll_BFu9i_BFu9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9ll) C1{ FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9ll, BFs9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9ll_BFs9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9ll_BFs9i) C1{ FL:9 FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9ll_BFs9i, BFs9ll_BFu9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9ll_BFs9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9ll_BFs9ll) C1{ FL:9 FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9ll_BFs9ll, BFs9ll_BFu9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9ll_BFs9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9ll_BFs9s) C1{ FL:9 FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9ll_BFs9s, BFs9ll_BFu9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9ll_BFu9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9ll_BFu9i) C1{ FL:9 FL:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9ll_BFu9i, BFs9ll_BFu9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9ll_BFu9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9ll_BFu9ll) C1{ FL:9 FL:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9ll_BFu9ll, BFs9ll_BFu9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9ll_BFu9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9ll_BFu9s) C1{ FL:9 FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9ll_BFu9s, BFs9ll_BFu9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9s) C1{ FL:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9s, BFs9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9s_BFs9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9s_BFs9i) C1{ FL:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9s_BFs9i, BFs9ll_BFu9ll_BFu9s_BFs9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9s_BFs9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9s_BFs9ll) C1{ FL:9 FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9s_BFs9ll, BFs9ll_BFu9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9s_BFs9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9s_BFs9s) C1{ FL:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9s_BFs9s, BFs9ll_BFu9ll_BFu9s_BFs9s)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9s_BFu9i  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9s_BFu9i) C1{ FL:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9s_BFu9i, BFs9ll_BFu9ll_BFu9s_BFu9i)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9s_BFu9ll  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9s_BFu9ll) C1{ FL:9 FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9s_BFu9ll, BFs9ll_BFu9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9ll_BFu9s_BFu9s  {
  signed __tsi64 v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9ll_BFu9s_BFu9s) C1{ FL:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9ll_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9ll_BFu9s_BFu9s, BFs9ll_BFu9ll_BFu9s_BFu9s)
//============================================================================


struct  BFs9ll_BFu9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
};
//SIG(1 BFs9ll_BFu9s) C1{ FL:9 Fs:9}



static void Test_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s, BFs9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFu9s_BFs9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed int v3:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9i) C1{ FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9i, BFs9ll_BFu9s_BFs9i)
//============================================================================


struct  BFs9ll_BFu9s_BFs9i_BFs9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9i_BFs9i) C1{ FL:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9i_BFs9i, BFs9ll_BFu9s_BFs9i_BFs9i)
//============================================================================


struct  BFs9ll_BFu9s_BFs9i_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9i_BFs9ll) C1{ FL:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9i_BFs9ll, BFs9ll_BFu9s_BFs9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFs9i_BFs9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9i_BFs9s) C1{ FL:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9i_BFs9s, BFs9ll_BFu9s_BFs9i_BFs9s)
//============================================================================


struct  BFs9ll_BFu9s_BFs9i_BFu9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9i_BFu9i) C1{ FL:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9i_BFu9i, BFs9ll_BFu9s_BFs9i_BFu9i)
//============================================================================


struct  BFs9ll_BFu9s_BFs9i_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9i_BFu9ll) C1{ FL:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9i_BFu9ll, BFs9ll_BFu9s_BFs9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFs9i_BFu9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9i_BFu9s) C1{ FL:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9i_BFu9s, BFs9ll_BFu9s_BFs9i_BFu9s)
//============================================================================


struct  BFs9ll_BFu9s_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9ll) C1{ FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9ll, BFs9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFs9ll_BFs9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9ll_BFs9i) C1{ FL:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9ll_BFs9i, BFs9ll_BFu9s_BFs9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFu9s_BFs9ll_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9ll_BFs9ll) C1{ FL:9 Fs:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9ll_BFs9ll, BFs9ll_BFu9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFs9ll_BFs9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9ll_BFs9s) C1{ FL:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9ll_BFs9s, BFs9ll_BFu9s_BFs9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFu9s_BFs9ll_BFu9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9ll_BFu9i) C1{ FL:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9ll_BFu9i, BFs9ll_BFu9s_BFs9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFu9s_BFs9ll_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9ll_BFu9ll) C1{ FL:9 Fs:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9ll_BFu9ll, BFs9ll_BFu9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFs9ll_BFu9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9ll_BFu9s) C1{ FL:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9ll_BFu9s, BFs9ll_BFu9s_BFs9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFu9s_BFs9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed short v3:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9s) C1{ FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9s, BFs9ll_BFu9s_BFs9s)
//============================================================================


struct  BFs9ll_BFu9s_BFs9s_BFs9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9s_BFs9i) C1{ FL:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9s_BFs9i, BFs9ll_BFu9s_BFs9s_BFs9i)
//============================================================================


struct  BFs9ll_BFu9s_BFs9s_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9s_BFs9ll) C1{ FL:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9s_BFs9ll, BFs9ll_BFu9s_BFs9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFs9s_BFs9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9s_BFs9s) C1{ FL:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9s_BFs9s, BFs9ll_BFu9s_BFs9s_BFs9s)
//============================================================================


struct  BFs9ll_BFu9s_BFs9s_BFu9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9s_BFu9i) C1{ FL:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9s_BFu9i, BFs9ll_BFu9s_BFs9s_BFu9i)
//============================================================================


struct  BFs9ll_BFu9s_BFs9s_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9s_BFu9ll) C1{ FL:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9s_BFu9ll, BFs9ll_BFu9s_BFs9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFs9s_BFu9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFs9s_BFu9s) C1{ FL:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFs9s_BFu9s, BFs9ll_BFu9s_BFs9s_BFu9s)
//============================================================================


struct  BFs9ll_BFu9s_BFu9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9i) C1{ FL:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9i, BFs9ll_BFu9s_BFu9i)
//============================================================================


struct  BFs9ll_BFu9s_BFu9i_BFs9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9i_BFs9i) C1{ FL:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9i_BFs9i, BFs9ll_BFu9s_BFu9i_BFs9i)
//============================================================================


struct  BFs9ll_BFu9s_BFu9i_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9i_BFs9ll) C1{ FL:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9i_BFs9ll, BFs9ll_BFu9s_BFu9i_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFu9i_BFs9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9i_BFs9s) C1{ FL:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9i_BFs9s, BFs9ll_BFu9s_BFu9i_BFs9s)
//============================================================================


struct  BFs9ll_BFu9s_BFu9i_BFu9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9i_BFu9i) C1{ FL:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9i_BFu9i, BFs9ll_BFu9s_BFu9i_BFu9i)
//============================================================================


struct  BFs9ll_BFu9s_BFu9i_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9i_BFu9ll) C1{ FL:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9ll_BFu9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9i_BFu9ll, BFs9ll_BFu9s_BFu9i_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFu9i_BFu9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9i_BFu9s) C1{ FL:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9i_BFu9s, BFs9ll_BFu9s_BFu9i_BFu9s)
//============================================================================


struct  BFs9ll_BFu9s_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9ll) C1{ FL:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9ll, BFs9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFu9ll_BFs9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9ll_BFs9i) C1{ FL:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9ll_BFs9i, BFs9ll_BFu9s_BFu9ll_BFs9i)
//============================================================================


struct  BFs9ll_BFu9s_BFu9ll_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9ll_BFs9ll) C1{ FL:9 Fs:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9ll_BFs9ll, BFs9ll_BFu9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFu9ll_BFs9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9ll_BFs9s) C1{ FL:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9ll_BFs9s, BFs9ll_BFu9s_BFu9ll_BFs9s)
//============================================================================


struct  BFs9ll_BFu9s_BFu9ll_BFu9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9ll_BFu9i) C1{ FL:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9ll_BFu9i, BFs9ll_BFu9s_BFu9ll_BFu9i)
//============================================================================


struct  BFs9ll_BFu9s_BFu9ll_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9ll_BFu9ll) C1{ FL:9 Fs:9 FL:9 FL:9}



static void Test_BFs9ll_BFu9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9ll_BFu9ll, BFs9ll_BFu9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFu9ll_BFu9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9ll_BFu9s) C1{ FL:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9ll_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9ll_BFu9s, BFs9ll_BFu9s_BFu9ll_BFu9s)
//============================================================================


struct  BFs9ll_BFu9s_BFu9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9s) C1{ FL:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9s, BFs9ll_BFu9s_BFu9s)
//============================================================================


struct  BFs9ll_BFu9s_BFu9s_BFs9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9s_BFs9i) C1{ FL:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9s_BFs9i, BFs9ll_BFu9s_BFu9s_BFs9i)
//============================================================================


struct  BFs9ll_BFu9s_BFu9s_BFs9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9s_BFs9ll) C1{ FL:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9s_BFs9ll, BFs9ll_BFu9s_BFu9s_BFs9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFu9s_BFs9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9s_BFs9s) C1{ FL:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9s_BFs9s, BFs9ll_BFu9s_BFu9s_BFs9s)
//============================================================================


struct  BFs9ll_BFu9s_BFu9s_BFu9i  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9s_BFu9i) C1{ FL:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9ll_BFu9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9s_BFu9i, BFs9ll_BFu9s_BFu9s_BFu9i)
//============================================================================


struct  BFs9ll_BFu9s_BFu9s_BFu9ll  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9s_BFu9ll) C1{ FL:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9ll_BFu9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9s_BFu9ll, BFs9ll_BFu9s_BFu9s_BFu9ll)
//============================================================================


struct  BFs9ll_BFu9s_BFu9s_BFu9s  {
  signed __tsi64 v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9ll_BFu9s_BFu9s_BFu9s) C1{ FL:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9ll_BFu9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9ll_BFu9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9ll_BFu9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9ll_BFu9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9ll_BFu9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9ll_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9ll_BFu9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9ll_BFu9s_BFu9s_BFu9s, BFs9ll_BFu9s_BFu9s_BFu9s)
//============================================================================


struct  BFs9s_BFs9i  {
  signed short v1:9;
  signed int v2:9;
};
//SIG(1 BFs9s_BFs9i) C1{ Fs:9 Fi:9}



static void Test_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i, BFs9s_BFs9i)
//============================================================================


struct  BFs9s_BFs9i_BFs9i  {
  signed short v1:9;
  signed int v2:9;
  signed int v3:9;
};
//SIG(1 BFs9s_BFs9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9i, BFs9s_BFs9i_BFs9i)
//============================================================================


struct  BFs9s_BFs9i_BFs9i_BFs9i  {
  signed short v1:9;
  signed int v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9i_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9i_BFs9i, BFs9s_BFs9i_BFs9i_BFs9i)
//============================================================================


struct  BFs9s_BFs9i_BFs9i_BFs9ll  {
  signed short v1:9;
  signed int v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9i_BFs9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9i_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9i_BFs9ll, BFs9s_BFs9i_BFs9i_BFs9ll)
//============================================================================


struct  BFs9s_BFs9i_BFs9i_BFs9s  {
  signed short v1:9;
  signed int v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9i_BFs9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9i_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9i_BFs9s, BFs9s_BFs9i_BFs9i_BFs9s)
//============================================================================


struct  BFs9s_BFs9i_BFs9i_BFu9i  {
  signed short v1:9;
  signed int v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9i_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9i_BFu9i, BFs9s_BFs9i_BFs9i_BFu9i)
//============================================================================


struct  BFs9s_BFs9i_BFs9i_BFu9ll  {
  signed short v1:9;
  signed int v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9i_BFu9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9i_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9i_BFu9ll, BFs9s_BFs9i_BFs9i_BFu9ll)
//============================================================================


struct  BFs9s_BFs9i_BFs9i_BFu9s  {
  signed short v1:9;
  signed int v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9i_BFu9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9i_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9i_BFu9s, BFs9s_BFs9i_BFs9i_BFu9s)
//============================================================================


struct  BFs9s_BFs9i_BFs9ll  {
  signed short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9s_BFs9i_BFs9ll) C1{ Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9ll, BFs9s_BFs9i_BFs9ll)
//============================================================================


struct  BFs9s_BFs9i_BFs9ll_BFs9i  {
  signed short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9ll_BFs9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9i_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9ll_BFs9i, BFs9s_BFs9i_BFs9ll_BFs9i)
//============================================================================


struct  BFs9s_BFs9i_BFs9ll_BFs9ll  {
  signed short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9ll_BFs9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFs9s_BFs9i_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9ll_BFs9ll, BFs9s_BFs9i_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFs9i_BFs9ll_BFs9s  {
  signed short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9ll_BFs9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9i_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9ll_BFs9s, BFs9s_BFs9i_BFs9ll_BFs9s)
//============================================================================


struct  BFs9s_BFs9i_BFs9ll_BFu9i  {
  signed short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9ll_BFu9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9i_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9ll_BFu9i, BFs9s_BFs9i_BFs9ll_BFu9i)
//============================================================================


struct  BFs9s_BFs9i_BFs9ll_BFu9ll  {
  signed short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9ll_BFu9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFs9s_BFs9i_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9ll_BFu9ll, BFs9s_BFs9i_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFs9i_BFs9ll_BFu9s  {
  signed short v1:9;
  signed int v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9ll_BFu9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9i_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9ll_BFu9s, BFs9s_BFs9i_BFs9ll_BFu9s)
//============================================================================


struct  BFs9s_BFs9i_BFs9s  {
  signed short v1:9;
  signed int v2:9;
  signed short v3:9;
};
//SIG(1 BFs9s_BFs9i_BFs9s) C1{ Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9s, BFs9s_BFs9i_BFs9s)
//============================================================================


struct  BFs9s_BFs9i_BFs9s_BFs9i  {
  signed short v1:9;
  signed int v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9s_BFs9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9i_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9s_BFs9i, BFs9s_BFs9i_BFs9s_BFs9i)
//============================================================================


struct  BFs9s_BFs9i_BFs9s_BFs9ll  {
  signed short v1:9;
  signed int v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9s_BFs9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9s_BFs9ll, BFs9s_BFs9i_BFs9s_BFs9ll)
//============================================================================


struct  BFs9s_BFs9i_BFs9s_BFs9s  {
  signed short v1:9;
  signed int v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9s_BFs9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9s_BFs9s, BFs9s_BFs9i_BFs9s_BFs9s)
//============================================================================


struct  BFs9s_BFs9i_BFs9s_BFu9i  {
  signed short v1:9;
  signed int v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9s_BFu9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9s_BFu9i, BFs9s_BFs9i_BFs9s_BFu9i)
//============================================================================


struct  BFs9s_BFs9i_BFs9s_BFu9ll  {
  signed short v1:9;
  signed int v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9s_BFu9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9s_BFu9ll, BFs9s_BFs9i_BFs9s_BFu9ll)
//============================================================================


struct  BFs9s_BFs9i_BFs9s_BFu9s  {
  signed short v1:9;
  signed int v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFs9s_BFu9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFs9s_BFu9s, BFs9s_BFs9i_BFs9s_BFu9s)
//============================================================================


struct  BFs9s_BFs9i_BFu9i  {
  signed short v1:9;
  signed int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9s_BFs9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9i, BFs9s_BFs9i_BFu9i)
//============================================================================


struct  BFs9s_BFs9i_BFu9i_BFs9i  {
  signed short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9i_BFs9i, BFs9s_BFs9i_BFu9i_BFs9i)
//============================================================================


struct  BFs9s_BFs9i_BFu9i_BFs9ll  {
  signed short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9i_BFs9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9i_BFs9ll, BFs9s_BFs9i_BFu9i_BFs9ll)
//============================================================================


struct  BFs9s_BFs9i_BFu9i_BFs9s  {
  signed short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9i_BFs9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9i_BFs9s, BFs9s_BFs9i_BFu9i_BFs9s)
//============================================================================


struct  BFs9s_BFs9i_BFu9i_BFu9i  {
  signed short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9i_BFu9i, BFs9s_BFs9i_BFu9i_BFu9i)
//============================================================================


struct  BFs9s_BFs9i_BFu9i_BFu9ll  {
  signed short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9i_BFu9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9i_BFu9ll, BFs9s_BFs9i_BFu9i_BFu9ll)
//============================================================================


struct  BFs9s_BFs9i_BFu9i_BFu9s  {
  signed short v1:9;
  signed int v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9i_BFu9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9i_BFu9s, BFs9s_BFs9i_BFu9i_BFu9s)
//============================================================================


struct  BFs9s_BFs9i_BFu9ll  {
  signed short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9s_BFs9i_BFu9ll) C1{ Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9ll, BFs9s_BFs9i_BFu9ll)
//============================================================================


struct  BFs9s_BFs9i_BFu9ll_BFs9i  {
  signed short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9ll_BFs9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9ll_BFs9i, BFs9s_BFs9i_BFu9ll_BFs9i)
//============================================================================


struct  BFs9s_BFs9i_BFu9ll_BFs9ll  {
  signed short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9ll_BFs9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFs9s_BFs9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9ll_BFs9ll, BFs9s_BFs9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFs9i_BFu9ll_BFs9s  {
  signed short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9ll_BFs9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9ll_BFs9s, BFs9s_BFs9i_BFu9ll_BFs9s)
//============================================================================


struct  BFs9s_BFs9i_BFu9ll_BFu9i  {
  signed short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9ll_BFu9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9ll_BFu9i, BFs9s_BFs9i_BFu9ll_BFu9i)
//============================================================================


struct  BFs9s_BFs9i_BFu9ll_BFu9ll  {
  signed short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9ll_BFu9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFs9s_BFs9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9ll_BFu9ll, BFs9s_BFs9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFs9i_BFu9ll_BFu9s  {
  signed short v1:9;
  signed int v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9ll_BFu9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9ll_BFu9s, BFs9s_BFs9i_BFu9ll_BFu9s)
//============================================================================


struct  BFs9s_BFs9i_BFu9s  {
  signed short v1:9;
  signed int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9s_BFs9i_BFu9s) C1{ Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9s, BFs9s_BFs9i_BFu9s)
//============================================================================


struct  BFs9s_BFs9i_BFu9s_BFs9i  {
  signed short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9s_BFs9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9s_BFs9i, BFs9s_BFs9i_BFu9s_BFs9i)
//============================================================================


struct  BFs9s_BFs9i_BFu9s_BFs9ll  {
  signed short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9s_BFs9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9s_BFs9ll, BFs9s_BFs9i_BFu9s_BFs9ll)
//============================================================================


struct  BFs9s_BFs9i_BFu9s_BFs9s  {
  signed short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9s_BFs9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9s_BFs9s, BFs9s_BFs9i_BFu9s_BFs9s)
//============================================================================


struct  BFs9s_BFs9i_BFu9s_BFu9i  {
  signed short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9s_BFu9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9s_BFu9i, BFs9s_BFs9i_BFu9s_BFu9i)
//============================================================================


struct  BFs9s_BFs9i_BFu9s_BFu9ll  {
  signed short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9s_BFu9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9s_BFu9ll, BFs9s_BFs9i_BFu9s_BFu9ll)
//============================================================================


struct  BFs9s_BFs9i_BFu9s_BFu9s  {
  signed short v1:9;
  signed int v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9i_BFu9s_BFu9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9i_BFu9s_BFu9s, BFs9s_BFs9i_BFu9s_BFu9s)
//============================================================================


struct  BFs9s_BFs9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
};
//SIG(1 BFs9s_BFs9ll) C1{ Fs:9 FL:9}



static void Test_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll, BFs9s_BFs9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFs9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9i) C1{ Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9i, BFs9s_BFs9ll_BFs9i)
//============================================================================


struct  BFs9s_BFs9ll_BFs9i_BFs9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9i_BFs9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9i_BFs9i, BFs9s_BFs9ll_BFs9i_BFs9i)
//============================================================================


struct  BFs9s_BFs9ll_BFs9i_BFs9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9i_BFs9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9i_BFs9ll, BFs9s_BFs9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFs9i_BFs9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9i_BFs9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9i_BFs9s, BFs9s_BFs9ll_BFs9i_BFs9s)
//============================================================================


struct  BFs9s_BFs9ll_BFs9i_BFu9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9i_BFu9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9i_BFu9i, BFs9s_BFs9ll_BFs9i_BFu9i)
//============================================================================


struct  BFs9s_BFs9ll_BFs9i_BFu9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9i_BFu9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9i_BFu9ll, BFs9s_BFs9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFs9i_BFu9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9i_BFu9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9i_BFu9s, BFs9s_BFs9ll_BFs9i_BFu9s)
//============================================================================


struct  BFs9s_BFs9ll_BFs9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9ll, BFs9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFs9ll_BFs9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9ll_BFs9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9ll_BFs9i, BFs9s_BFs9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFs9s_BFs9ll_BFs9ll_BFs9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFs9s_BFs9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9ll_BFs9ll, BFs9s_BFs9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFs9ll_BFs9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9ll_BFs9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9ll_BFs9s, BFs9s_BFs9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFs9s_BFs9ll_BFs9ll_BFu9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9ll_BFu9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9ll_BFu9i, BFs9s_BFs9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFs9s_BFs9ll_BFs9ll_BFu9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFs9s_BFs9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9ll_BFu9ll, BFs9s_BFs9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFs9ll_BFu9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9ll_BFu9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9ll_BFu9s, BFs9s_BFs9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFs9s_BFs9ll_BFs9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9s) C1{ Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9s, BFs9s_BFs9ll_BFs9s)
//============================================================================


struct  BFs9s_BFs9ll_BFs9s_BFs9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9s_BFs9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9s_BFs9i, BFs9s_BFs9ll_BFs9s_BFs9i)
//============================================================================


struct  BFs9s_BFs9ll_BFs9s_BFs9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9s_BFs9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9s_BFs9ll, BFs9s_BFs9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFs9s_BFs9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9s_BFs9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9s_BFs9s, BFs9s_BFs9ll_BFs9s_BFs9s)
//============================================================================


struct  BFs9s_BFs9ll_BFs9s_BFu9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9s_BFu9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9s_BFu9i, BFs9s_BFs9ll_BFs9s_BFu9i)
//============================================================================


struct  BFs9s_BFs9ll_BFs9s_BFu9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9s_BFu9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9s_BFu9ll, BFs9s_BFs9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFs9s_BFu9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFs9s_BFu9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFs9s_BFu9s, BFs9s_BFs9ll_BFs9s_BFu9s)
//============================================================================


struct  BFs9s_BFs9ll_BFu9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9i) C1{ Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9i, BFs9s_BFs9ll_BFu9i)
//============================================================================


struct  BFs9s_BFs9ll_BFu9i_BFs9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9i_BFs9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9i_BFs9i, BFs9s_BFs9ll_BFu9i_BFs9i)
//============================================================================


struct  BFs9s_BFs9ll_BFu9i_BFs9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9i_BFs9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9i_BFs9ll, BFs9s_BFs9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFu9i_BFs9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9i_BFs9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9i_BFs9s, BFs9s_BFs9ll_BFu9i_BFs9s)
//============================================================================


struct  BFs9s_BFs9ll_BFu9i_BFu9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9i_BFu9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9i_BFu9i, BFs9s_BFs9ll_BFu9i_BFu9i)
//============================================================================


struct  BFs9s_BFs9ll_BFu9i_BFu9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9i_BFu9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9i_BFu9ll, BFs9s_BFs9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFu9i_BFu9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9i_BFu9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9i_BFu9s, BFs9s_BFs9ll_BFu9i_BFu9s)
//============================================================================


struct  BFs9s_BFs9ll_BFu9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9ll, BFs9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFu9ll_BFs9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9ll_BFs9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9ll_BFs9i, BFs9s_BFs9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFs9s_BFs9ll_BFu9ll_BFs9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFs9s_BFs9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9ll_BFs9ll, BFs9s_BFs9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFu9ll_BFs9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9ll_BFs9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9ll_BFs9s, BFs9s_BFs9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFs9s_BFs9ll_BFu9ll_BFu9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9ll_BFu9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9ll_BFu9i, BFs9s_BFs9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFs9s_BFs9ll_BFu9ll_BFu9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFs9s_BFs9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9ll_BFu9ll, BFs9s_BFs9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFu9ll_BFu9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9ll_BFu9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9ll_BFu9s, BFs9s_BFs9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFs9s_BFs9ll_BFu9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9s) C1{ Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9s, BFs9s_BFs9ll_BFu9s)
//============================================================================


struct  BFs9s_BFs9ll_BFu9s_BFs9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9s_BFs9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9s_BFs9i, BFs9s_BFs9ll_BFu9s_BFs9i)
//============================================================================


struct  BFs9s_BFs9ll_BFu9s_BFs9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9s_BFs9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9s_BFs9ll, BFs9s_BFs9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFu9s_BFs9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9s_BFs9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9s_BFs9s, BFs9s_BFs9ll_BFu9s_BFs9s)
//============================================================================


struct  BFs9s_BFs9ll_BFu9s_BFu9i  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9s_BFu9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9s_BFu9i, BFs9s_BFs9ll_BFu9s_BFu9i)
//============================================================================


struct  BFs9s_BFs9ll_BFu9s_BFu9ll  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9s_BFu9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9s_BFu9ll, BFs9s_BFs9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFs9s_BFs9ll_BFu9s_BFu9s  {
  signed short v1:9;
  signed __tsi64 v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9ll_BFu9s_BFu9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFs9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9ll_BFu9s_BFu9s, BFs9s_BFs9ll_BFu9s_BFu9s)
//============================================================================


struct  BFs9s_BFs9s  {
  signed short v1:9;
  signed short v2:9;
};
//SIG(1 BFs9s_BFs9s) C1{ Fs:9 Fs:9}



static void Test_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s, BFs9s_BFs9s)
//============================================================================


struct  BFs9s_BFs9s_BFs9i  {
  signed short v1:9;
  signed short v2:9;
  signed int v3:9;
};
//SIG(1 BFs9s_BFs9s_BFs9i) C1{ Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9i, BFs9s_BFs9s_BFs9i)
//============================================================================


struct  BFs9s_BFs9s_BFs9i_BFs9i  {
  signed short v1:9;
  signed short v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9i_BFs9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9i_BFs9i, BFs9s_BFs9s_BFs9i_BFs9i)
//============================================================================


struct  BFs9s_BFs9s_BFs9i_BFs9ll  {
  signed short v1:9;
  signed short v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9i_BFs9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9i_BFs9ll, BFs9s_BFs9s_BFs9i_BFs9ll)
//============================================================================


struct  BFs9s_BFs9s_BFs9i_BFs9s  {
  signed short v1:9;
  signed short v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9i_BFs9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9i_BFs9s, BFs9s_BFs9s_BFs9i_BFs9s)
//============================================================================


struct  BFs9s_BFs9s_BFs9i_BFu9i  {
  signed short v1:9;
  signed short v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9i_BFu9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9i_BFu9i, BFs9s_BFs9s_BFs9i_BFu9i)
//============================================================================


struct  BFs9s_BFs9s_BFs9i_BFu9ll  {
  signed short v1:9;
  signed short v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9i_BFu9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9i_BFu9ll, BFs9s_BFs9s_BFs9i_BFu9ll)
//============================================================================


struct  BFs9s_BFs9s_BFs9i_BFu9s  {
  signed short v1:9;
  signed short v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9i_BFu9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFs9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9i_BFu9s, BFs9s_BFs9s_BFs9i_BFu9s)
//============================================================================


struct  BFs9s_BFs9s_BFs9ll  {
  signed short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9s_BFs9s_BFs9ll) C1{ Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9ll, BFs9s_BFs9s_BFs9ll)
//============================================================================


struct  BFs9s_BFs9s_BFs9ll_BFs9i  {
  signed short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9ll_BFs9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9ll_BFs9i, BFs9s_BFs9s_BFs9ll_BFs9i)
//============================================================================


struct  BFs9s_BFs9s_BFs9ll_BFs9ll  {
  signed short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9ll_BFs9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFs9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9ll_BFs9ll, BFs9s_BFs9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFs9s_BFs9ll_BFs9s  {
  signed short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9ll_BFs9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9ll_BFs9s, BFs9s_BFs9s_BFs9ll_BFs9s)
//============================================================================


struct  BFs9s_BFs9s_BFs9ll_BFu9i  {
  signed short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9ll_BFu9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9ll_BFu9i, BFs9s_BFs9s_BFs9ll_BFu9i)
//============================================================================


struct  BFs9s_BFs9s_BFs9ll_BFu9ll  {
  signed short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9ll_BFu9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFs9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9ll_BFu9ll, BFs9s_BFs9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFs9s_BFs9ll_BFu9s  {
  signed short v1:9;
  signed short v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9ll_BFu9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9ll_BFu9s, BFs9s_BFs9s_BFs9ll_BFu9s)
//============================================================================


struct  BFs9s_BFs9s_BFs9s  {
  signed short v1:9;
  signed short v2:9;
  signed short v3:9;
};
//SIG(1 BFs9s_BFs9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 6, "sizeof(BFs9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9s, BFs9s_BFs9s_BFs9s)
//============================================================================


struct  BFs9s_BFs9s_BFs9s_BFs9i  {
  signed short v1:9;
  signed short v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9s_BFs9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9s_BFs9i, BFs9s_BFs9s_BFs9s_BFs9i)
//============================================================================


struct  BFs9s_BFs9s_BFs9s_BFs9ll  {
  signed short v1:9;
  signed short v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9s_BFs9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9s_BFs9ll, BFs9s_BFs9s_BFs9s_BFs9ll)
//============================================================================


struct  BFs9s_BFs9s_BFs9s_BFs9s  {
  signed short v1:9;
  signed short v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFs9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9s_BFs9s, BFs9s_BFs9s_BFs9s_BFs9s)
//============================================================================


struct  BFs9s_BFs9s_BFs9s_BFu9i  {
  signed short v1:9;
  signed short v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9s_BFu9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9s_BFu9i, BFs9s_BFs9s_BFs9s_BFu9i)
//============================================================================


struct  BFs9s_BFs9s_BFs9s_BFu9ll  {
  signed short v1:9;
  signed short v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9s_BFu9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9s_BFu9ll, BFs9s_BFs9s_BFs9s_BFu9ll)
//============================================================================


struct  BFs9s_BFs9s_BFs9s_BFu9s  {
  signed short v1:9;
  signed short v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFs9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFs9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFs9s_BFu9s, BFs9s_BFs9s_BFs9s_BFu9s)
//============================================================================


struct  BFs9s_BFs9s_BFu9i  {
  signed short v1:9;
  signed short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9s_BFs9s_BFu9i) C1{ Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9i, BFs9s_BFs9s_BFu9i)
//============================================================================


struct  BFs9s_BFs9s_BFu9i_BFs9i  {
  signed short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9i_BFs9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9i_BFs9i, BFs9s_BFs9s_BFu9i_BFs9i)
//============================================================================


struct  BFs9s_BFs9s_BFu9i_BFs9ll  {
  signed short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9i_BFs9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9i_BFs9ll, BFs9s_BFs9s_BFu9i_BFs9ll)
//============================================================================


struct  BFs9s_BFs9s_BFu9i_BFs9s  {
  signed short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9i_BFs9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9i_BFs9s, BFs9s_BFs9s_BFu9i_BFs9s)
//============================================================================


struct  BFs9s_BFs9s_BFu9i_BFu9i  {
  signed short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9i_BFu9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFs9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9i_BFu9i, BFs9s_BFs9s_BFu9i_BFu9i)
//============================================================================


struct  BFs9s_BFs9s_BFu9i_BFu9ll  {
  signed short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9i_BFu9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFs9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9i_BFu9ll, BFs9s_BFs9s_BFu9i_BFu9ll)
//============================================================================


struct  BFs9s_BFs9s_BFu9i_BFu9s  {
  signed short v1:9;
  signed short v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9i_BFu9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFs9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9i_BFu9s, BFs9s_BFs9s_BFu9i_BFu9s)
//============================================================================


struct  BFs9s_BFs9s_BFu9ll  {
  signed short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9s_BFs9s_BFu9ll) C1{ Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9ll, BFs9s_BFs9s_BFu9ll)
//============================================================================


struct  BFs9s_BFs9s_BFu9ll_BFs9i  {
  signed short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9ll_BFs9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9ll_BFs9i, BFs9s_BFs9s_BFu9ll_BFs9i)
//============================================================================


struct  BFs9s_BFs9s_BFu9ll_BFs9ll  {
  signed short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9ll_BFs9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFs9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9ll_BFs9ll, BFs9s_BFs9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFs9s_BFu9ll_BFs9s  {
  signed short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9ll_BFs9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9ll_BFs9s, BFs9s_BFs9s_BFu9ll_BFs9s)
//============================================================================


struct  BFs9s_BFs9s_BFu9ll_BFu9i  {
  signed short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9ll_BFu9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFs9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9ll_BFu9i, BFs9s_BFs9s_BFu9ll_BFu9i)
//============================================================================


struct  BFs9s_BFs9s_BFu9ll_BFu9ll  {
  signed short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9ll_BFu9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFs9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9ll_BFu9ll, BFs9s_BFs9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFs9s_BFu9ll_BFu9s  {
  signed short v1:9;
  signed short v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9ll_BFu9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFs9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9ll_BFu9s, BFs9s_BFs9s_BFu9ll_BFu9s)
//============================================================================


struct  BFs9s_BFs9s_BFu9s  {
  signed short v1:9;
  signed short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9s_BFs9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFs9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9s, BFs9s_BFs9s_BFu9s)
//============================================================================


struct  BFs9s_BFs9s_BFu9s_BFs9i  {
  signed short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9s_BFs9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9s_BFs9i, BFs9s_BFs9s_BFu9s_BFs9i)
//============================================================================


struct  BFs9s_BFs9s_BFu9s_BFs9ll  {
  signed short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9s_BFs9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9s_BFs9ll, BFs9s_BFs9s_BFu9s_BFs9ll)
//============================================================================


struct  BFs9s_BFs9s_BFu9s_BFs9s  {
  signed short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFs9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9s_BFs9s, BFs9s_BFs9s_BFu9s_BFs9s)
//============================================================================


struct  BFs9s_BFs9s_BFu9s_BFu9i  {
  signed short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9s_BFu9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFs9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFs9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9s_BFu9i, BFs9s_BFs9s_BFu9s_BFu9i)
//============================================================================


struct  BFs9s_BFs9s_BFu9s_BFu9ll  {
  signed short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9s_BFu9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFs9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFs9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9s_BFu9ll, BFs9s_BFs9s_BFu9s_BFu9ll)
//============================================================================


struct  BFs9s_BFs9s_BFu9s_BFu9s  {
  signed short v1:9;
  signed short v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFs9s_BFu9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFs9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFs9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFs9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFs9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFs9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_sll(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9s_BFs9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFs9s_BFu9s_BFu9s, BFs9s_BFs9s_BFu9s_BFu9s)
//============================================================================


struct  BFs9s_BFu9i  {
  signed short v1:9;
  unsigned int v2:9;
};
//SIG(1 BFs9s_BFu9i) C1{ Fs:9 Fi:9}



static void Test_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i, BFs9s_BFu9i)
//============================================================================


struct  BFs9s_BFu9i_BFs9i  {
  signed short v1:9;
  unsigned int v2:9;
  signed int v3:9;
};
//SIG(1 BFs9s_BFu9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9i, BFs9s_BFu9i_BFs9i)
//============================================================================


struct  BFs9s_BFu9i_BFs9i_BFs9i  {
  signed short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9i_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9i_BFs9i, BFs9s_BFu9i_BFs9i_BFs9i)
//============================================================================


struct  BFs9s_BFu9i_BFs9i_BFs9ll  {
  signed short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9i_BFs9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9i_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9i_BFs9ll, BFs9s_BFu9i_BFs9i_BFs9ll)
//============================================================================


struct  BFs9s_BFu9i_BFs9i_BFs9s  {
  signed short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9i_BFs9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9i_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9i_BFs9s, BFs9s_BFu9i_BFs9i_BFs9s)
//============================================================================


struct  BFs9s_BFu9i_BFs9i_BFu9i  {
  signed short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9i_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9i_BFu9i, BFs9s_BFu9i_BFs9i_BFu9i)
//============================================================================


struct  BFs9s_BFu9i_BFs9i_BFu9ll  {
  signed short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9i_BFu9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9i_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9i_BFu9ll, BFs9s_BFu9i_BFs9i_BFu9ll)
//============================================================================


struct  BFs9s_BFu9i_BFs9i_BFu9s  {
  signed short v1:9;
  unsigned int v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9i_BFu9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9i_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9i_BFu9s, BFs9s_BFu9i_BFs9i_BFu9s)
//============================================================================


struct  BFs9s_BFu9i_BFs9ll  {
  signed short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9s_BFu9i_BFs9ll) C1{ Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9ll, BFs9s_BFu9i_BFs9ll)
//============================================================================


struct  BFs9s_BFu9i_BFs9ll_BFs9i  {
  signed short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9ll_BFs9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9i_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9ll_BFs9i, BFs9s_BFu9i_BFs9ll_BFs9i)
//============================================================================


struct  BFs9s_BFu9i_BFs9ll_BFs9ll  {
  signed short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9ll_BFs9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFs9s_BFu9i_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9ll_BFs9ll, BFs9s_BFu9i_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFu9i_BFs9ll_BFs9s  {
  signed short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9ll_BFs9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9i_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9ll_BFs9s, BFs9s_BFu9i_BFs9ll_BFs9s)
//============================================================================


struct  BFs9s_BFu9i_BFs9ll_BFu9i  {
  signed short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9ll_BFu9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9i_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9ll_BFu9i, BFs9s_BFu9i_BFs9ll_BFu9i)
//============================================================================


struct  BFs9s_BFu9i_BFs9ll_BFu9ll  {
  signed short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9ll_BFu9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFs9s_BFu9i_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9ll_BFu9ll, BFs9s_BFu9i_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFu9i_BFs9ll_BFu9s  {
  signed short v1:9;
  unsigned int v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9ll_BFu9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9i_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9ll_BFu9s, BFs9s_BFu9i_BFs9ll_BFu9s)
//============================================================================


struct  BFs9s_BFu9i_BFs9s  {
  signed short v1:9;
  unsigned int v2:9;
  signed short v3:9;
};
//SIG(1 BFs9s_BFu9i_BFs9s) C1{ Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9s, BFs9s_BFu9i_BFs9s)
//============================================================================


struct  BFs9s_BFu9i_BFs9s_BFs9i  {
  signed short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9s_BFs9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9i_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9s_BFs9i, BFs9s_BFu9i_BFs9s_BFs9i)
//============================================================================


struct  BFs9s_BFu9i_BFs9s_BFs9ll  {
  signed short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9s_BFs9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9i_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9s_BFs9ll, BFs9s_BFu9i_BFs9s_BFs9ll)
//============================================================================


struct  BFs9s_BFu9i_BFs9s_BFs9s  {
  signed short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9s_BFs9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9i_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9s_BFs9s, BFs9s_BFu9i_BFs9s_BFs9s)
//============================================================================


struct  BFs9s_BFu9i_BFs9s_BFu9i  {
  signed short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9s_BFu9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9i_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9s_BFu9i, BFs9s_BFu9i_BFs9s_BFu9i)
//============================================================================


struct  BFs9s_BFu9i_BFs9s_BFu9ll  {
  signed short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9s_BFu9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9i_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9s_BFu9ll, BFs9s_BFu9i_BFs9s_BFu9ll)
//============================================================================


struct  BFs9s_BFu9i_BFs9s_BFu9s  {
  signed short v1:9;
  unsigned int v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFs9s_BFu9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9i_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFs9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFs9s_BFu9s, BFs9s_BFu9i_BFs9s_BFu9s)
//============================================================================


struct  BFs9s_BFu9i_BFu9i  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9s_BFu9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9i, BFs9s_BFu9i_BFu9i)
//============================================================================


struct  BFs9s_BFu9i_BFu9i_BFs9i  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9i_BFs9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9i_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9i_BFs9i, BFs9s_BFu9i_BFu9i_BFs9i)
//============================================================================


struct  BFs9s_BFu9i_BFu9i_BFs9ll  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9i_BFs9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9i_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9i_BFs9ll, BFs9s_BFu9i_BFu9i_BFs9ll)
//============================================================================


struct  BFs9s_BFu9i_BFu9i_BFs9s  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9i_BFs9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9i_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9i_BFs9s, BFs9s_BFu9i_BFu9i_BFs9s)
//============================================================================


struct  BFs9s_BFu9i_BFu9i_BFu9i  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9i_BFu9i) C1{ Fs:9 Fi:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9i_BFu9i, BFs9s_BFu9i_BFu9i_BFu9i)
//============================================================================


struct  BFs9s_BFu9i_BFu9i_BFu9ll  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9i_BFu9ll) C1{ Fs:9 Fi:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9i_BFu9ll, BFs9s_BFu9i_BFu9i_BFu9ll)
//============================================================================


struct  BFs9s_BFu9i_BFu9i_BFu9s  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9i_BFu9s) C1{ Fs:9 Fi:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9i_BFu9s, BFs9s_BFu9i_BFu9i_BFu9s)
//============================================================================


struct  BFs9s_BFu9i_BFu9ll  {
  signed short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9s_BFu9i_BFu9ll) C1{ Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9ll, BFs9s_BFu9i_BFu9ll)
//============================================================================


struct  BFs9s_BFu9i_BFu9ll_BFs9i  {
  signed short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9ll_BFs9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9i_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9ll_BFs9i, BFs9s_BFu9i_BFu9ll_BFs9i)
//============================================================================


struct  BFs9s_BFu9i_BFu9ll_BFs9ll  {
  signed short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9ll_BFs9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFs9s_BFu9i_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9ll_BFs9ll, BFs9s_BFu9i_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFu9i_BFu9ll_BFs9s  {
  signed short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9ll_BFs9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9i_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9ll_BFs9s, BFs9s_BFu9i_BFu9ll_BFs9s)
//============================================================================


struct  BFs9s_BFu9i_BFu9ll_BFu9i  {
  signed short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9ll_BFu9i) C1{ Fs:9 Fi:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9ll_BFu9i, BFs9s_BFu9i_BFu9ll_BFu9i)
//============================================================================


struct  BFs9s_BFu9i_BFu9ll_BFu9ll  {
  signed short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9ll_BFu9ll) C1{ Fs:9 Fi:9 FL:9 FL:9}



static void Test_BFs9s_BFu9i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9ll_BFu9ll, BFs9s_BFu9i_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFu9i_BFu9ll_BFu9s  {
  signed short v1:9;
  unsigned int v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9ll_BFu9s) C1{ Fs:9 Fi:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9ll_BFu9s, BFs9s_BFu9i_BFu9ll_BFu9s)
//============================================================================


struct  BFs9s_BFu9i_BFu9s  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9s_BFu9i_BFu9s) C1{ Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9s, BFs9s_BFu9i_BFu9s)
//============================================================================


struct  BFs9s_BFu9i_BFu9s_BFs9i  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9s_BFs9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9i_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9s_BFs9i, BFs9s_BFu9i_BFu9s_BFs9i)
//============================================================================


struct  BFs9s_BFu9i_BFu9s_BFs9ll  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9s_BFs9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9i_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9s_BFs9ll, BFs9s_BFu9i_BFu9s_BFs9ll)
//============================================================================


struct  BFs9s_BFu9i_BFu9s_BFs9s  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9s_BFs9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9i_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9s_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9s_BFs9s, BFs9s_BFu9i_BFu9s_BFs9s)
//============================================================================


struct  BFs9s_BFu9i_BFu9s_BFu9i  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9s_BFu9i) C1{ Fs:9 Fi:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9s_BFu9i, BFs9s_BFu9i_BFu9s_BFu9i)
//============================================================================


struct  BFs9s_BFu9i_BFu9s_BFu9ll  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9s_BFu9ll) C1{ Fs:9 Fi:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9s_BFu9ll, BFs9s_BFu9i_BFu9s_BFu9ll)
//============================================================================


struct  BFs9s_BFu9i_BFu9s_BFu9s  {
  signed short v1:9;
  unsigned int v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9i_BFu9s_BFu9s) C1{ Fs:9 Fi:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9i_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9i_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9i_BFu9s_BFu9s, BFs9s_BFu9i_BFu9s_BFu9s)
//============================================================================


struct  BFs9s_BFu9ll  {
  signed short v1:9;
  __tsu64 v2:9;
};
//SIG(1 BFs9s_BFu9ll) C1{ Fs:9 FL:9}



static void Test_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll, BFs9s_BFu9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFs9i  {
  signed short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9i) C1{ Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9i, BFs9s_BFu9ll_BFs9i)
//============================================================================


struct  BFs9s_BFu9ll_BFs9i_BFs9i  {
  signed short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9i_BFs9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9i_BFs9i, BFs9s_BFu9ll_BFs9i_BFs9i)
//============================================================================


struct  BFs9s_BFu9ll_BFs9i_BFs9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9i_BFs9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9ll_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9i_BFs9ll, BFs9s_BFu9ll_BFs9i_BFs9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFs9i_BFs9s  {
  signed short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9i_BFs9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9i_BFs9s, BFs9s_BFu9ll_BFs9i_BFs9s)
//============================================================================


struct  BFs9s_BFu9ll_BFs9i_BFu9i  {
  signed short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9i_BFu9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9i_BFu9i, BFs9s_BFu9ll_BFs9i_BFu9i)
//============================================================================


struct  BFs9s_BFu9ll_BFs9i_BFu9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9i_BFu9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9ll_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9i_BFu9ll, BFs9s_BFu9ll_BFs9i_BFu9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFs9i_BFu9s  {
  signed short v1:9;
  __tsu64 v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9i_BFu9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9i_BFu9s, BFs9s_BFu9ll_BFs9i_BFu9s)
//============================================================================


struct  BFs9s_BFu9ll_BFs9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9ll, BFs9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFs9ll_BFs9i  {
  signed short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9ll_BFs9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9ll_BFs9i, BFs9s_BFu9ll_BFs9ll_BFs9i)
//============================================================================


struct  BFs9s_BFu9ll_BFs9ll_BFs9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFs9s_BFu9ll_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9ll_BFs9ll, BFs9s_BFu9ll_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFs9ll_BFs9s  {
  signed short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9ll_BFs9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9ll_BFs9s, BFs9s_BFu9ll_BFs9ll_BFs9s)
//============================================================================


struct  BFs9s_BFu9ll_BFs9ll_BFu9i  {
  signed short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9ll_BFu9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9ll_BFu9i, BFs9s_BFu9ll_BFs9ll_BFu9i)
//============================================================================


struct  BFs9s_BFu9ll_BFs9ll_BFu9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFs9s_BFu9ll_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9ll_BFu9ll, BFs9s_BFu9ll_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFs9ll_BFu9s  {
  signed short v1:9;
  __tsu64 v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9ll_BFu9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9ll_BFu9s, BFs9s_BFu9ll_BFs9ll_BFu9s)
//============================================================================


struct  BFs9s_BFu9ll_BFs9s  {
  signed short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9s) C1{ Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9s, BFs9s_BFu9ll_BFs9s)
//============================================================================


struct  BFs9s_BFu9ll_BFs9s_BFs9i  {
  signed short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9s_BFs9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9s_BFs9i, BFs9s_BFu9ll_BFs9s_BFs9i)
//============================================================================


struct  BFs9s_BFu9ll_BFs9s_BFs9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9s_BFs9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9ll_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9s_BFs9ll, BFs9s_BFu9ll_BFs9s_BFs9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFs9s_BFs9s  {
  signed short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9s_BFs9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9s_BFs9s, BFs9s_BFu9ll_BFs9s_BFs9s)
//============================================================================


struct  BFs9s_BFu9ll_BFs9s_BFu9i  {
  signed short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9s_BFu9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9s_BFu9i, BFs9s_BFu9ll_BFs9s_BFu9i)
//============================================================================


struct  BFs9s_BFu9ll_BFs9s_BFu9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9s_BFu9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9ll_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9s_BFu9ll, BFs9s_BFu9ll_BFs9s_BFu9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFs9s_BFu9s  {
  signed short v1:9;
  __tsu64 v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFs9s_BFu9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFs9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFs9s_BFu9s, BFs9s_BFu9ll_BFs9s_BFu9s)
//============================================================================


struct  BFs9s_BFu9ll_BFu9i  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9i) C1{ Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9i, BFs9s_BFu9ll_BFu9i)
//============================================================================


struct  BFs9s_BFu9ll_BFu9i_BFs9i  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9i_BFs9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9i_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9i_BFs9i, BFs9s_BFu9ll_BFu9i_BFs9i)
//============================================================================


struct  BFs9s_BFu9ll_BFu9i_BFs9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9i_BFs9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9ll_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9i_BFs9ll, BFs9s_BFu9ll_BFu9i_BFs9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFu9i_BFs9s  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9i_BFs9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9i_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9i_BFs9s, BFs9s_BFu9ll_BFu9i_BFs9s)
//============================================================================


struct  BFs9s_BFu9ll_BFu9i_BFu9i  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9i_BFu9i) C1{ Fs:9 FL:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9i_BFu9i, BFs9s_BFu9ll_BFu9i_BFu9i)
//============================================================================


struct  BFs9s_BFu9ll_BFu9i_BFu9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9i_BFu9ll) C1{ Fs:9 FL:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9ll_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9i_BFu9ll, BFs9s_BFu9ll_BFu9i_BFu9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFu9i_BFu9s  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9i_BFu9s) C1{ Fs:9 FL:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9i_BFu9s, BFs9s_BFu9ll_BFu9i_BFu9s)
//============================================================================


struct  BFs9s_BFu9ll_BFu9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9ll, BFs9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFu9ll_BFs9i  {
  signed short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9ll_BFs9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9ll_BFs9i, BFs9s_BFu9ll_BFu9ll_BFs9i)
//============================================================================


struct  BFs9s_BFu9ll_BFu9ll_BFs9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9ll_BFs9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFs9s_BFu9ll_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9ll_BFs9ll, BFs9s_BFu9ll_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFu9ll_BFs9s  {
  signed short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9ll_BFs9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9ll_BFs9s, BFs9s_BFu9ll_BFu9ll_BFs9s)
//============================================================================


struct  BFs9s_BFu9ll_BFu9ll_BFu9i  {
  signed short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9ll_BFu9i) C1{ Fs:9 FL:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9ll_BFu9i, BFs9s_BFu9ll_BFu9ll_BFu9i)
//============================================================================


struct  BFs9s_BFu9ll_BFu9ll_BFu9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9ll_BFu9ll) C1{ Fs:9 FL:9 FL:9 FL:9}



static void Test_BFs9s_BFu9ll_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9ll_BFu9ll, BFs9s_BFu9ll_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFu9ll_BFu9s  {
  signed short v1:9;
  __tsu64 v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9ll_BFu9s) C1{ Fs:9 FL:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9ll_BFu9s, BFs9s_BFu9ll_BFu9ll_BFu9s)
//============================================================================


struct  BFs9s_BFu9ll_BFu9s  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9s) C1{ Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFs9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9s, BFs9s_BFu9ll_BFu9s)
//============================================================================


struct  BFs9s_BFu9ll_BFu9s_BFs9i  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9s_BFs9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9s_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9s_BFs9i, BFs9s_BFu9ll_BFu9s_BFs9i)
//============================================================================


struct  BFs9s_BFu9ll_BFu9s_BFs9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9s_BFs9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9ll_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9s_BFs9ll, BFs9s_BFu9ll_BFu9s_BFs9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFu9s_BFs9s  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9s_BFs9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9s_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9s_BFs9s, BFs9s_BFu9ll_BFu9s_BFs9s)
//============================================================================


struct  BFs9s_BFu9ll_BFu9s_BFu9i  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9s_BFu9i) C1{ Fs:9 FL:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9ll_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9s_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9s_BFu9i, BFs9s_BFu9ll_BFu9s_BFu9i)
//============================================================================


struct  BFs9s_BFu9ll_BFu9s_BFu9ll  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9s_BFu9ll) C1{ Fs:9 FL:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9ll_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 3, 3, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9s_BFu9ll, BFs9s_BFu9ll_BFu9s_BFu9ll)
//============================================================================


struct  BFs9s_BFu9ll_BFu9s_BFu9s  {
  signed short v1:9;
  __tsu64 v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9ll_BFu9s_BFu9s) C1{ Fs:9 FL:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9ll_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9ll_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9ll_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9ll_BFu9s_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9ll_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 1, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, 1, "BFs9s_BFu9ll_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9ll_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9ll_BFu9s_BFu9s, BFs9s_BFu9ll_BFu9s_BFu9s)
//============================================================================


struct  BFs9s_BFu9s  {
  signed short v1:9;
  unsigned short v2:9;
};
//SIG(1 BFs9s_BFu9s) C1{ Fs:9 Fs:9}



static void Test_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFs9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s, BFs9s_BFu9s)
//============================================================================


struct  BFs9s_BFu9s_BFs9i  {
  signed short v1:9;
  unsigned short v2:9;
  signed int v3:9;
};
//SIG(1 BFs9s_BFu9s_BFs9i) C1{ Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9i, BFs9s_BFu9s_BFs9i)
//============================================================================


struct  BFs9s_BFu9s_BFs9i_BFs9i  {
  signed short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9i_BFs9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9s_BFs9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFs9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9i_BFs9i, BFs9s_BFu9s_BFs9i_BFs9i)
//============================================================================


struct  BFs9s_BFu9s_BFs9i_BFs9ll  {
  signed short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9i_BFs9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9s_BFs9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9i_BFs9ll, BFs9s_BFu9s_BFs9i_BFs9ll)
//============================================================================


struct  BFs9s_BFu9s_BFs9i_BFs9s  {
  signed short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9i_BFs9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9s_BFs9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFs9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9i_BFs9s, BFs9s_BFu9s_BFs9i_BFs9s)
//============================================================================


struct  BFs9s_BFu9s_BFs9i_BFu9i  {
  signed short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9i_BFu9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9s_BFs9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFs9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9i_BFu9i, BFs9s_BFu9s_BFs9i_BFu9i)
//============================================================================


struct  BFs9s_BFu9s_BFs9i_BFu9ll  {
  signed short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9i_BFu9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9s_BFs9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9i_BFu9ll, BFs9s_BFu9s_BFs9i_BFu9ll)
//============================================================================


struct  BFs9s_BFu9s_BFs9i_BFu9s  {
  signed short v1:9;
  unsigned short v2:9;
  signed int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9i_BFu9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9s_BFs9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFs9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFu9s_BFs9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9i_BFu9s, BFs9s_BFu9s_BFs9i_BFu9s)
//============================================================================


struct  BFs9s_BFu9s_BFs9ll  {
  signed short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
};
//SIG(1 BFs9s_BFu9s_BFs9ll) C1{ Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9ll, BFs9s_BFu9s_BFs9ll)
//============================================================================


struct  BFs9s_BFu9s_BFs9ll_BFs9i  {
  signed short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9ll_BFs9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9s_BFs9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9ll_BFs9i, BFs9s_BFu9s_BFs9ll_BFs9i)
//============================================================================


struct  BFs9s_BFu9s_BFs9ll_BFs9ll  {
  signed short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9ll_BFs9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFu9s_BFs9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9ll_BFs9ll, BFs9s_BFu9s_BFs9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFu9s_BFs9ll_BFs9s  {
  signed short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9ll_BFs9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9s_BFs9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFs9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9ll_BFs9s, BFs9s_BFu9s_BFs9ll_BFs9s)
//============================================================================


struct  BFs9s_BFu9s_BFs9ll_BFu9i  {
  signed short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9ll_BFu9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9s_BFs9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9ll_BFu9i, BFs9s_BFu9s_BFs9ll_BFu9i)
//============================================================================


struct  BFs9s_BFu9s_BFs9ll_BFu9ll  {
  signed short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9ll_BFu9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFu9s_BFs9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9ll_BFu9ll, BFs9s_BFu9s_BFs9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFu9s_BFs9ll_BFu9s  {
  signed short v1:9;
  unsigned short v2:9;
  signed __tsi64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9ll_BFu9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9s_BFs9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFs9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9ll_BFu9s, BFs9s_BFu9s_BFs9ll_BFu9s)
//============================================================================


struct  BFs9s_BFu9s_BFs9s  {
  signed short v1:9;
  unsigned short v2:9;
  signed short v3:9;
};
//SIG(1 BFs9s_BFu9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 6, "sizeof(BFs9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9s, BFs9s_BFu9s_BFs9s)
//============================================================================


struct  BFs9s_BFu9s_BFs9s_BFs9i  {
  signed short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9s_BFs9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9s_BFs9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFs9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9s_BFs9i, BFs9s_BFu9s_BFs9s_BFs9i)
//============================================================================


struct  BFs9s_BFu9s_BFs9s_BFs9ll  {
  signed short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9s_BFs9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9s_BFs9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9s_BFs9ll, BFs9s_BFu9s_BFs9s_BFs9ll)
//============================================================================


struct  BFs9s_BFu9s_BFs9s_BFs9s  {
  signed short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9s_BFs9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFu9s_BFs9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9s_BFs9s, BFs9s_BFu9s_BFs9s_BFs9s)
//============================================================================


struct  BFs9s_BFu9s_BFs9s_BFu9i  {
  signed short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9s_BFu9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9s_BFs9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFs9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9s_BFu9i, BFs9s_BFu9s_BFs9s_BFu9i)
//============================================================================


struct  BFs9s_BFu9s_BFs9s_BFu9ll  {
  signed short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9s_BFu9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9s_BFs9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFs9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9s_BFu9ll, BFs9s_BFu9s_BFs9s_BFu9ll)
//============================================================================


struct  BFs9s_BFu9s_BFs9s_BFu9s  {
  signed short v1:9;
  unsigned short v2:9;
  signed short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFs9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9s_BFs9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFs9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFs9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFs9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFu9s_BFs9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFu9s_BFs9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFs9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFs9s_BFu9s, BFs9s_BFu9s_BFs9s_BFu9s)
//============================================================================


struct  BFs9s_BFu9s_BFu9i  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFs9s_BFu9s_BFu9i) C1{ Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9i, BFs9s_BFu9s_BFu9i)
//============================================================================


struct  BFs9s_BFu9s_BFu9i_BFs9i  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9i_BFs9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9s_BFu9i_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9i_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9i_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9i_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFu9i_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9i_BFs9i, BFs9s_BFu9s_BFu9i_BFs9i)
//============================================================================


struct  BFs9s_BFu9s_BFu9i_BFs9ll  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9i_BFs9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9s_BFu9i_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9i_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9i_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9i_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9i_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9i_BFs9ll, BFs9s_BFu9s_BFu9i_BFs9ll)
//============================================================================


struct  BFs9s_BFu9s_BFu9i_BFs9s  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9i_BFs9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9s_BFu9i_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9i_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9i_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9i_BFs9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFu9i_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9i_BFs9s, BFs9s_BFu9s_BFu9i_BFs9s)
//============================================================================


struct  BFs9s_BFu9s_BFu9i_BFu9i  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9i_BFu9i) C1{ Fs:9 Fs:9 Fi:9 Fi:9}



static void Test_BFs9s_BFu9s_BFu9i_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9i_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9i_BFu9i, BFs9s_BFu9s_BFu9i_BFu9i)
//============================================================================


struct  BFs9s_BFu9s_BFu9i_BFu9ll  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9i_BFu9ll) C1{ Fs:9 Fs:9 Fi:9 FL:9}



static void Test_BFs9s_BFu9s_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9i_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9i_BFu9ll, BFs9s_BFu9s_BFu9i_BFu9ll)
//============================================================================


struct  BFs9s_BFu9s_BFu9i_BFu9s  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned int v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9i_BFu9s) C1{ Fs:9 Fs:9 Fi:9 Fs:9}



static void Test_BFs9s_BFu9s_BFu9i_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9i_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFu9s_BFu9i_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9i_BFu9s, BFs9s_BFu9s_BFu9i_BFu9s)
//============================================================================


struct  BFs9s_BFu9s_BFu9ll  {
  signed short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFs9s_BFu9s_BFu9ll) C1{ Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9ll, BFs9s_BFu9s_BFu9ll)
//============================================================================


struct  BFs9s_BFu9s_BFu9ll_BFs9i  {
  signed short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9ll_BFs9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9s_BFu9ll_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9ll_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9ll_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9ll_BFs9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9ll_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9ll_BFs9i, BFs9s_BFu9s_BFu9ll_BFs9i)
//============================================================================


struct  BFs9s_BFu9s_BFu9ll_BFs9ll  {
  signed short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9ll_BFs9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFu9s_BFu9ll_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9ll_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9ll_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9ll_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9ll_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9ll_BFs9ll, BFs9s_BFu9s_BFu9ll_BFs9ll)
//============================================================================


struct  BFs9s_BFu9s_BFu9ll_BFs9s  {
  signed short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9ll_BFs9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9s_BFu9ll_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9ll_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9ll_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9ll_BFs9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9ll_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFu9ll_BFs9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9ll_BFs9s, BFs9s_BFu9s_BFu9ll_BFs9s)
//============================================================================


struct  BFs9s_BFu9s_BFu9ll_BFu9i  {
  signed short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9ll_BFu9i) C1{ Fs:9 Fs:9 FL:9 Fi:9}



static void Test_BFs9s_BFu9s_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9ll_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9i");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9ll_BFu9i, BFs9s_BFu9s_BFu9ll_BFu9i)
//============================================================================


struct  BFs9s_BFu9s_BFu9ll_BFu9ll  {
  signed short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9ll_BFu9ll) C1{ Fs:9 Fs:9 FL:9 FL:9}



static void Test_BFs9s_BFu9s_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9ll_BFu9ll, BFs9s_BFu9s_BFu9ll_BFu9ll)
//============================================================================


struct  BFs9s_BFu9s_BFu9ll_BFu9s  {
  signed short v1:9;
  unsigned short v2:9;
  __tsu64 v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9ll_BFu9s) C1{ Fs:9 Fs:9 FL:9 Fs:9}



static void Test_BFs9s_BFu9s_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9ll_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, 1, "BFs9s_BFu9s_BFu9ll_BFu9s");
    set_bf_and_test(lv, v4, 4, 2, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9ll_BFu9s, BFs9s_BFu9s_BFu9ll_BFu9s)
//============================================================================


struct  BFs9s_BFu9s_BFu9s  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFs9s_BFu9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFs9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9s, BFs9s_BFu9s_BFu9s)
//============================================================================


struct  BFs9s_BFu9s_BFu9s_BFs9i  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9s_BFs9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9s_BFu9s_BFs9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9s_BFs9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9s_BFs9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9s_BFs9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFu9s_BFs9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9s_BFs9i, BFs9s_BFu9s_BFu9s_BFs9i)
//============================================================================


struct  BFs9s_BFu9s_BFu9s_BFs9ll  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed __tsi64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9s_BFs9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9s_BFu9s_BFs9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9s_BFs9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9s_BFs9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9s_BFs9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9s_BFs9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9s_BFs9ll, BFs9s_BFu9s_BFu9s_BFs9ll)
//============================================================================


struct  BFs9s_BFu9s_BFu9s_BFs9s  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  signed short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9s_BFs9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9s_BFu9s_BFs9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9s_BFs9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9s_BFs9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9s_BFs9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFu9s_BFu9s_BFs9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFs9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFs9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9s_BFs9s, BFs9s_BFu9s_BFu9s_BFs9s)
//============================================================================


struct  BFs9s_BFu9s_BFu9s_BFu9i  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  unsigned int v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9s_BFu9i) C1{ Fs:9 Fs:9 Fs:9 Fi:9}



static void Test_BFs9s_BFu9s_BFu9s_BFu9i()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9s_BFu9i");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFs9s_BFu9s_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9i");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9s_BFu9i, BFs9s_BFu9s_BFu9s_BFu9i)
//============================================================================


struct  BFs9s_BFu9s_BFu9s_BFu9ll  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  __tsu64 v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9s_BFu9ll) C1{ Fs:9 Fs:9 Fs:9 FL:9}



static void Test_BFs9s_BFu9s_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9s_BFu9ll");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFs9s_BFu9s_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9ll");
    set_bf_and_test(lv, v4, 5, 1, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9s_BFu9ll, BFs9s_BFu9s_BFu9s_BFu9ll)
//============================================================================


struct  BFs9s_BFu9s_BFu9s_BFu9s  {
  signed short v1:9;
  unsigned short v2:9;
  unsigned short v3:9;
  unsigned short v4:9;
};
//SIG(1 BFs9s_BFu9s_BFu9s_BFu9s) C1{ Fs:9 Fs:9 Fs:9 Fs:9}



static void Test_BFs9s_BFu9s_BFu9s_BFu9s()
{
  {
    init_simple_test("BFs9s_BFu9s_BFu9s_BFu9s");
    static STRUCT_IF_C BFs9s_BFu9s_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFs9s_BFu9s_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFs9s_BFu9s_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 9, hide_sll(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, 1, "BFs9s_BFu9s_BFu9s_BFu9s");
    set_bf_and_test(lv, v4, 6, 0, 9, hide_ull(1LL<<8), "BFs9s_BFu9s_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFs9s_BFu9s_BFu9s_BFu9s, BFs9s_BFu9s_BFu9s_BFu9s)
//============================================================================


struct  BFu15i  {
  unsigned int v1:15;
};
//SIG(1 BFu15i) C1{ Fi:15}



static void Test_BFu15i()
{
  {
    init_simple_test("BFu15i");
    static STRUCT_IF_C BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i, BFu15i)
//============================================================================


struct  BFu15i_BFs15i  {
  unsigned int v1:15;
  signed int v2:15;
};
//SIG(1 BFu15i_BFs15i) C1{ Fi:15 Fi:15}



static void Test_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i, BFu15i_BFs15i)
//============================================================================


struct  BFu15i_BFs15i_BFs15i  {
  unsigned int v1:15;
  signed int v2:15;
  signed int v3:15;
};
//SIG(1 BFu15i_BFs15i_BFs15i) C1{ Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15i, BFu15i_BFs15i_BFs15i)
//============================================================================


struct  BFu15i_BFs15i_BFs15i_BFs15i  {
  unsigned int v1:15;
  signed int v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15i_BFs15i) C1{ Fi:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15i_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15i_BFs15i, BFu15i_BFs15i_BFs15i_BFs15i)
//============================================================================


struct  BFu15i_BFs15i_BFs15i_BFs15ll  {
  unsigned int v1:15;
  signed int v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15i_BFs15ll) C1{ Fi:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15i_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15i_BFs15ll, BFu15i_BFs15i_BFs15i_BFs15ll)
//============================================================================


struct  BFu15i_BFs15i_BFs15i_BFs15s  {
  unsigned int v1:15;
  signed int v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15i_BFs15s) C1{ Fi:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15i_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15i_BFs15s, BFu15i_BFs15i_BFs15i_BFs15s)
//============================================================================


struct  BFu15i_BFs15i_BFs15i_BFu15i  {
  unsigned int v1:15;
  signed int v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15i_BFu15i) C1{ Fi:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15i_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15i_BFu15i, BFu15i_BFs15i_BFs15i_BFu15i)
//============================================================================


struct  BFu15i_BFs15i_BFs15i_BFu15ll  {
  unsigned int v1:15;
  signed int v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15i_BFu15ll) C1{ Fi:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15i_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15i_BFu15ll, BFu15i_BFs15i_BFs15i_BFu15ll)
//============================================================================


struct  BFu15i_BFs15i_BFs15i_BFu15s  {
  unsigned int v1:15;
  signed int v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15i_BFu15s) C1{ Fi:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15i_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15i_BFu15s, BFu15i_BFs15i_BFs15i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15ll, BFu15i_BFs15i_BFs15ll)
//============================================================================


struct  BFu15i_BFs15i_BFs15ll_BFs15i  {
  unsigned int v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15ll_BFs15i) C1{ Fi:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15i_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15ll_BFs15i, BFu15i_BFs15i_BFs15ll_BFs15i)
//============================================================================


struct  BFu15i_BFs15i_BFs15ll_BFs15ll  {
  unsigned int v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15ll_BFs15ll) C1{ Fi:15 Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFs15i_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15ll_BFs15ll, BFu15i_BFs15i_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFs15i_BFs15ll_BFs15s  {
  unsigned int v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15ll_BFs15s) C1{ Fi:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15i_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15ll_BFs15s, BFu15i_BFs15i_BFs15ll_BFs15s)
//============================================================================


struct  BFu15i_BFs15i_BFs15ll_BFu15i  {
  unsigned int v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15ll_BFu15i) C1{ Fi:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15i_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15ll_BFu15i, BFu15i_BFs15i_BFs15ll_BFu15i)
//============================================================================


struct  BFu15i_BFs15i_BFs15ll_BFu15ll  {
  unsigned int v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15ll_BFu15ll) C1{ Fi:15 Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFs15i_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15ll_BFu15ll, BFu15i_BFs15i_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFs15i_BFs15ll_BFu15s  {
  unsigned int v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15ll_BFu15s) C1{ Fi:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15i_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15ll_BFu15s, BFu15i_BFs15i_BFs15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15s, BFu15i_BFs15i_BFs15s)
//============================================================================


struct  BFu15i_BFs15i_BFs15s_BFs15i  {
  unsigned int v1:15;
  signed int v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15s_BFs15i) C1{ Fi:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15i_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15s_BFs15i, BFu15i_BFs15i_BFs15s_BFs15i)
//============================================================================


struct  BFu15i_BFs15i_BFs15s_BFs15ll  {
  unsigned int v1:15;
  signed int v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15s_BFs15ll) C1{ Fi:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15i_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15s_BFs15ll, BFu15i_BFs15i_BFs15s_BFs15ll)
//============================================================================


struct  BFu15i_BFs15i_BFs15s_BFs15s  {
  unsigned int v1:15;
  signed int v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15s_BFs15s) C1{ Fi:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15i_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15s_BFs15s, BFu15i_BFs15i_BFs15s_BFs15s)
//============================================================================


struct  BFu15i_BFs15i_BFs15s_BFu15i  {
  unsigned int v1:15;
  signed int v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15s_BFu15i) C1{ Fi:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15i_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15s_BFu15i, BFu15i_BFs15i_BFs15s_BFu15i)
//============================================================================


struct  BFu15i_BFs15i_BFs15s_BFu15ll  {
  unsigned int v1:15;
  signed int v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15s_BFu15ll) C1{ Fi:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15i_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15s_BFu15ll, BFu15i_BFs15i_BFs15s_BFu15ll)
//============================================================================


struct  BFu15i_BFs15i_BFs15s_BFu15s  {
  unsigned int v1:15;
  signed int v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFs15s_BFu15s) C1{ Fi:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15i_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFs15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFs15s_BFu15s, BFu15i_BFs15i_BFs15s_BFu15s)
//============================================================================


struct  BFu15i_BFs15i_BFu15i  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu15i_BFs15i_BFu15i) C1{ Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15i, BFu15i_BFs15i_BFu15i)
//============================================================================


struct  BFu15i_BFs15i_BFu15i_BFs15i  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15i_BFs15i) C1{ Fi:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15i_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15i_BFs15i, BFu15i_BFs15i_BFu15i_BFs15i)
//============================================================================


struct  BFu15i_BFs15i_BFu15i_BFs15ll  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15i_BFs15ll) C1{ Fi:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15i_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15i_BFs15ll, BFu15i_BFs15i_BFu15i_BFs15ll)
//============================================================================


struct  BFu15i_BFs15i_BFu15i_BFs15s  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15i_BFs15s) C1{ Fi:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15i_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15i_BFs15s, BFu15i_BFs15i_BFu15i_BFs15s)
//============================================================================


struct  BFu15i_BFs15i_BFu15i_BFu15i  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15i_BFu15i) C1{ Fi:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15i_BFu15i, BFu15i_BFs15i_BFu15i_BFu15i)
//============================================================================


struct  BFu15i_BFs15i_BFu15i_BFu15ll  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15i_BFu15ll) C1{ Fi:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15i_BFu15ll, BFu15i_BFs15i_BFu15i_BFu15ll)
//============================================================================


struct  BFu15i_BFs15i_BFu15i_BFu15s  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15i_BFu15s) C1{ Fi:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15i_BFu15s, BFu15i_BFs15i_BFu15i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15ll, BFu15i_BFs15i_BFu15ll)
//============================================================================


struct  BFu15i_BFs15i_BFu15ll_BFs15i  {
  unsigned int v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15ll_BFs15i) C1{ Fi:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15i_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15ll_BFs15i, BFu15i_BFs15i_BFu15ll_BFs15i)
//============================================================================


struct  BFu15i_BFs15i_BFu15ll_BFs15ll  {
  unsigned int v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15ll_BFs15ll) C1{ Fi:15 Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFs15i_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15ll_BFs15ll, BFu15i_BFs15i_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFs15i_BFu15ll_BFs15s  {
  unsigned int v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15ll_BFs15s) C1{ Fi:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15i_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15ll_BFs15s, BFu15i_BFs15i_BFu15ll_BFs15s)
//============================================================================


struct  BFu15i_BFs15i_BFu15ll_BFu15i  {
  unsigned int v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15ll_BFu15i) C1{ Fi:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15ll_BFu15i, BFu15i_BFs15i_BFu15ll_BFu15i)
//============================================================================


struct  BFu15i_BFs15i_BFu15ll_BFu15ll  {
  unsigned int v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15ll_BFu15ll) C1{ Fi:15 Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFs15i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15ll_BFu15ll, BFu15i_BFs15i_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFs15i_BFu15ll_BFu15s  {
  unsigned int v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15ll_BFu15s) C1{ Fi:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15ll_BFu15s, BFu15i_BFs15i_BFu15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15s, BFu15i_BFs15i_BFu15s)
//============================================================================


struct  BFu15i_BFs15i_BFu15s_BFs15i  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15s_BFs15i) C1{ Fi:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15i_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15s_BFs15i, BFu15i_BFs15i_BFu15s_BFs15i)
//============================================================================


struct  BFu15i_BFs15i_BFu15s_BFs15ll  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15s_BFs15ll) C1{ Fi:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15i_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15s_BFs15ll, BFu15i_BFs15i_BFu15s_BFs15ll)
//============================================================================


struct  BFu15i_BFs15i_BFu15s_BFs15s  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15s_BFs15s) C1{ Fi:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15i_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15s_BFs15s, BFu15i_BFs15i_BFu15s_BFs15s)
//============================================================================


struct  BFu15i_BFs15i_BFu15s_BFu15i  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15s_BFu15i) C1{ Fi:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15s_BFu15i, BFu15i_BFs15i_BFu15s_BFu15i)
//============================================================================


struct  BFu15i_BFs15i_BFu15s_BFu15ll  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15s_BFu15ll) C1{ Fi:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15s_BFu15ll, BFu15i_BFs15i_BFu15s_BFu15ll)
//============================================================================


struct  BFu15i_BFs15i_BFu15s_BFu15s  {
  unsigned int v1:15;
  signed int v2:15;
  unsigned short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15i_BFu15s_BFu15s) C1{ Fi:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15i_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15i_BFu15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15i_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15i_BFu15s_BFu15s, BFu15i_BFs15i_BFu15s_BFu15s)
//============================================================================


struct  BFu15i_BFs15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
};
//SIG(1 BFu15i_BFs15ll) C1{ Fi:15 FL:15}



static void Test_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll, BFu15i_BFs15ll)
//============================================================================


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



static void Test_BFu15i_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15i, BFu15i_BFs15ll_BFs15i)
//============================================================================


struct  BFu15i_BFs15ll_BFs15i_BFs15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15i_BFs15i) C1{ Fi:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15i_BFs15i, BFu15i_BFs15ll_BFs15i_BFs15i)
//============================================================================


struct  BFu15i_BFs15ll_BFs15i_BFs15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15i_BFs15ll) C1{ Fi:15 FL:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15ll_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15i_BFs15ll, BFu15i_BFs15ll_BFs15i_BFs15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFs15i_BFs15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15i_BFs15s) C1{ Fi:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15i_BFs15s, BFu15i_BFs15ll_BFs15i_BFs15s)
//============================================================================


struct  BFu15i_BFs15ll_BFs15i_BFu15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15i_BFu15i) C1{ Fi:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15i_BFu15i, BFu15i_BFs15ll_BFs15i_BFu15i)
//============================================================================


struct  BFu15i_BFs15ll_BFs15i_BFu15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15i_BFu15ll) C1{ Fi:15 FL:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15ll_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15i_BFu15ll, BFu15i_BFs15ll_BFs15i_BFu15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFs15i_BFu15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15i_BFu15s) C1{ Fi:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15i_BFu15s, BFu15i_BFs15ll_BFs15i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15ll, BFu15i_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFs15ll_BFs15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15ll_BFs15i) C1{ Fi:15 FL:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15ll_BFs15i, BFu15i_BFs15ll_BFs15ll_BFs15i)
//============================================================================


struct  BFu15i_BFs15ll_BFs15ll_BFs15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15ll_BFs15ll) C1{ Fi:15 FL:15 FL:15 FL:15}



static void Test_BFu15i_BFs15ll_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15ll_BFs15ll, BFu15i_BFs15ll_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFs15ll_BFs15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15ll_BFs15s) C1{ Fi:15 FL:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15ll_BFs15s, BFu15i_BFs15ll_BFs15ll_BFs15s)
//============================================================================


struct  BFu15i_BFs15ll_BFs15ll_BFu15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15ll_BFu15i) C1{ Fi:15 FL:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15ll_BFu15i, BFu15i_BFs15ll_BFs15ll_BFu15i)
//============================================================================


struct  BFu15i_BFs15ll_BFs15ll_BFu15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15ll_BFu15ll) C1{ Fi:15 FL:15 FL:15 FL:15}



static void Test_BFu15i_BFs15ll_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15ll_BFu15ll, BFu15i_BFs15ll_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFs15ll_BFu15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15ll_BFu15s) C1{ Fi:15 FL:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15ll_BFu15s, BFu15i_BFs15ll_BFs15ll_BFu15s)
//============================================================================


struct  BFu15i_BFs15ll_BFs15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15s) C1{ Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15s, BFu15i_BFs15ll_BFs15s)
//============================================================================


struct  BFu15i_BFs15ll_BFs15s_BFs15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15s_BFs15i) C1{ Fi:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15s_BFs15i, BFu15i_BFs15ll_BFs15s_BFs15i)
//============================================================================


struct  BFu15i_BFs15ll_BFs15s_BFs15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15s_BFs15ll) C1{ Fi:15 FL:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15ll_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15s_BFs15ll, BFu15i_BFs15ll_BFs15s_BFs15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFs15s_BFs15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15s_BFs15s) C1{ Fi:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15s_BFs15s, BFu15i_BFs15ll_BFs15s_BFs15s)
//============================================================================


struct  BFu15i_BFs15ll_BFs15s_BFu15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15s_BFu15i) C1{ Fi:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15s_BFu15i, BFu15i_BFs15ll_BFs15s_BFu15i)
//============================================================================


struct  BFu15i_BFs15ll_BFs15s_BFu15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15s_BFu15ll) C1{ Fi:15 FL:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15ll_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15s_BFu15ll, BFu15i_BFs15ll_BFs15s_BFu15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFs15s_BFu15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFs15s_BFu15s) C1{ Fi:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFs15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFs15s_BFu15s, BFu15i_BFs15ll_BFs15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15i, BFu15i_BFs15ll_BFu15i)
//============================================================================


struct  BFu15i_BFs15ll_BFu15i_BFs15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15i_BFs15i) C1{ Fi:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15i_BFs15i, BFu15i_BFs15ll_BFu15i_BFs15i)
//============================================================================


struct  BFu15i_BFs15ll_BFu15i_BFs15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15i_BFs15ll) C1{ Fi:15 FL:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15ll_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15i_BFs15ll, BFu15i_BFs15ll_BFu15i_BFs15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFu15i_BFs15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15i_BFs15s) C1{ Fi:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15i_BFs15s, BFu15i_BFs15ll_BFu15i_BFs15s)
//============================================================================


struct  BFu15i_BFs15ll_BFu15i_BFu15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15i_BFu15i) C1{ Fi:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15i_BFu15i, BFu15i_BFs15ll_BFu15i_BFu15i)
//============================================================================


struct  BFu15i_BFs15ll_BFu15i_BFu15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15i_BFu15ll) C1{ Fi:15 FL:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15ll_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15i_BFu15ll, BFu15i_BFs15ll_BFu15i_BFu15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFu15i_BFu15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15i_BFu15s) C1{ Fi:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15i_BFu15s, BFu15i_BFs15ll_BFu15i_BFu15s)
//============================================================================


struct  BFu15i_BFs15ll_BFu15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15ll) C1{ Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15ll, BFu15i_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFu15ll_BFs15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15ll_BFs15i) C1{ Fi:15 FL:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15ll_BFs15i, BFu15i_BFs15ll_BFu15ll_BFs15i)
//============================================================================


struct  BFu15i_BFs15ll_BFu15ll_BFs15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15ll_BFs15ll) C1{ Fi:15 FL:15 FL:15 FL:15}



static void Test_BFu15i_BFs15ll_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15ll_BFs15ll, BFu15i_BFs15ll_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFu15ll_BFs15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15ll_BFs15s) C1{ Fi:15 FL:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15ll_BFs15s, BFu15i_BFs15ll_BFu15ll_BFs15s)
//============================================================================


struct  BFu15i_BFs15ll_BFu15ll_BFu15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15ll_BFu15i) C1{ Fi:15 FL:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15ll_BFu15i, BFu15i_BFs15ll_BFu15ll_BFu15i)
//============================================================================


struct  BFu15i_BFs15ll_BFu15ll_BFu15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15ll_BFu15ll) C1{ Fi:15 FL:15 FL:15 FL:15}



static void Test_BFu15i_BFs15ll_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15ll_BFu15ll, BFu15i_BFs15ll_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFu15ll_BFu15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15ll_BFu15s) C1{ Fi:15 FL:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15ll_BFu15s, BFu15i_BFs15ll_BFu15ll_BFu15s)
//============================================================================


struct  BFu15i_BFs15ll_BFu15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15s) C1{ Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15s, BFu15i_BFs15ll_BFu15s)
//============================================================================


struct  BFu15i_BFs15ll_BFu15s_BFs15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15s_BFs15i) C1{ Fi:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15s_BFs15i, BFu15i_BFs15ll_BFu15s_BFs15i)
//============================================================================


struct  BFu15i_BFs15ll_BFu15s_BFs15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15s_BFs15ll) C1{ Fi:15 FL:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15ll_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15s_BFs15ll, BFu15i_BFs15ll_BFu15s_BFs15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFu15s_BFs15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15s_BFs15s) C1{ Fi:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15s_BFs15s, BFu15i_BFs15ll_BFu15s_BFs15s)
//============================================================================


struct  BFu15i_BFs15ll_BFu15s_BFu15i  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15s_BFu15i) C1{ Fi:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15ll_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15s_BFu15i, BFu15i_BFs15ll_BFu15s_BFu15i)
//============================================================================


struct  BFu15i_BFs15ll_BFu15s_BFu15ll  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15s_BFu15ll) C1{ Fi:15 FL:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15ll_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15s_BFu15ll, BFu15i_BFs15ll_BFu15s_BFu15ll)
//============================================================================


struct  BFu15i_BFs15ll_BFu15s_BFu15s  {
  unsigned int v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15ll_BFu15s_BFu15s) C1{ Fi:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15ll_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15ll_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15ll_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15ll_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15ll_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15ll_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15ll_BFu15s_BFu15s, BFu15i_BFs15ll_BFu15s_BFu15s)
//============================================================================


struct  BFu15i_BFs15s  {
  unsigned int v1:15;
  signed short v2:15;
};
//SIG(1 BFu15i_BFs15s) C1{ Fi:15 Fs:15}



static void Test_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s, BFu15i_BFs15s)
//============================================================================


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



static void Test_BFu15i_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15i, BFu15i_BFs15s_BFs15i)
//============================================================================


struct  BFu15i_BFs15s_BFs15i_BFs15i  {
  unsigned int v1:15;
  signed short v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15i_BFs15i) C1{ Fi:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15s_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15i_BFs15i, BFu15i_BFs15s_BFs15i_BFs15i)
//============================================================================


struct  BFu15i_BFs15s_BFs15i_BFs15ll  {
  unsigned int v1:15;
  signed short v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15i_BFs15ll) C1{ Fi:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15s_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15i_BFs15ll, BFu15i_BFs15s_BFs15i_BFs15ll)
//============================================================================


struct  BFu15i_BFs15s_BFs15i_BFs15s  {
  unsigned int v1:15;
  signed short v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15i_BFs15s) C1{ Fi:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15s_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15i_BFs15s, BFu15i_BFs15s_BFs15i_BFs15s)
//============================================================================


struct  BFu15i_BFs15s_BFs15i_BFu15i  {
  unsigned int v1:15;
  signed short v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15i_BFu15i) C1{ Fi:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15s_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15i_BFu15i, BFu15i_BFs15s_BFs15i_BFu15i)
//============================================================================


struct  BFu15i_BFs15s_BFs15i_BFu15ll  {
  unsigned int v1:15;
  signed short v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15i_BFu15ll) C1{ Fi:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15s_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15i_BFu15ll, BFu15i_BFs15s_BFs15i_BFu15ll)
//============================================================================


struct  BFu15i_BFs15s_BFs15i_BFu15s  {
  unsigned int v1:15;
  signed short v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15i_BFu15s) C1{ Fi:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15s_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15i_BFu15s, BFu15i_BFs15s_BFs15i_BFu15s)
//============================================================================


struct  BFu15i_BFs15s_BFs15ll  {
  unsigned int v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
};
//SIG(1 BFu15i_BFs15s_BFs15ll) C1{ Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15ll, BFu15i_BFs15s_BFs15ll)
//============================================================================


struct  BFu15i_BFs15s_BFs15ll_BFs15i  {
  unsigned int v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15ll_BFs15i) C1{ Fi:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15s_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15ll_BFs15i, BFu15i_BFs15s_BFs15ll_BFs15i)
//============================================================================


struct  BFu15i_BFs15s_BFs15ll_BFs15ll  {
  unsigned int v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15ll_BFs15ll) C1{ Fi:15 Fs:15 FL:15 FL:15}



static void Test_BFu15i_BFs15s_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15ll_BFs15ll, BFu15i_BFs15s_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFs15s_BFs15ll_BFs15s  {
  unsigned int v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15ll_BFs15s) C1{ Fi:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15s_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15ll_BFs15s, BFu15i_BFs15s_BFs15ll_BFs15s)
//============================================================================


struct  BFu15i_BFs15s_BFs15ll_BFu15i  {
  unsigned int v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15ll_BFu15i) C1{ Fi:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15s_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15ll_BFu15i, BFu15i_BFs15s_BFs15ll_BFu15i)
//============================================================================


struct  BFu15i_BFs15s_BFs15ll_BFu15ll  {
  unsigned int v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15ll_BFu15ll) C1{ Fi:15 Fs:15 FL:15 FL:15}



static void Test_BFu15i_BFs15s_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15ll_BFu15ll, BFu15i_BFs15s_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFs15s_BFs15ll_BFu15s  {
  unsigned int v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15ll_BFu15s) C1{ Fi:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15s_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15ll_BFu15s, BFu15i_BFs15s_BFs15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15s, BFu15i_BFs15s_BFs15s)
//============================================================================


struct  BFu15i_BFs15s_BFs15s_BFs15i  {
  unsigned int v1:15;
  signed short v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15s_BFs15i) C1{ Fi:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15s_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15s_BFs15i, BFu15i_BFs15s_BFs15s_BFs15i)
//============================================================================


struct  BFu15i_BFs15s_BFs15s_BFs15ll  {
  unsigned int v1:15;
  signed short v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15s_BFs15ll) C1{ Fi:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15s_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15s_BFs15ll, BFu15i_BFs15s_BFs15s_BFs15ll)
//============================================================================


struct  BFu15i_BFs15s_BFs15s_BFs15s  {
  unsigned int v1:15;
  signed short v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15s_BFs15s) C1{ Fi:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15s_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15s_BFs15s, BFu15i_BFs15s_BFs15s_BFs15s)
//============================================================================


struct  BFu15i_BFs15s_BFs15s_BFu15i  {
  unsigned int v1:15;
  signed short v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15s_BFu15i) C1{ Fi:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15s_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15s_BFu15i, BFu15i_BFs15s_BFs15s_BFu15i)
//============================================================================


struct  BFu15i_BFs15s_BFs15s_BFu15ll  {
  unsigned int v1:15;
  signed short v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15s_BFu15ll) C1{ Fi:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15s_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15s_BFu15ll, BFu15i_BFs15s_BFs15s_BFu15ll)
//============================================================================


struct  BFu15i_BFs15s_BFs15s_BFu15s  {
  unsigned int v1:15;
  signed short v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFs15s_BFu15s) C1{ Fi:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15s_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFs15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFs15s_BFu15s, BFu15i_BFs15s_BFs15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15i, BFu15i_BFs15s_BFu15i)
//============================================================================


struct  BFu15i_BFs15s_BFu15i_BFs15i  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15i_BFs15i) C1{ Fi:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15s_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15i_BFs15i, BFu15i_BFs15s_BFu15i_BFs15i)
//============================================================================


struct  BFu15i_BFs15s_BFu15i_BFs15ll  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15i_BFs15ll) C1{ Fi:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15s_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15i_BFs15ll, BFu15i_BFs15s_BFu15i_BFs15ll)
//============================================================================


struct  BFu15i_BFs15s_BFu15i_BFs15s  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15i_BFs15s) C1{ Fi:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15s_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15i_BFs15s, BFu15i_BFs15s_BFu15i_BFs15s)
//============================================================================


struct  BFu15i_BFs15s_BFu15i_BFu15i  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15i_BFu15i) C1{ Fi:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15i_BFs15s_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15i_BFu15i, BFu15i_BFs15s_BFu15i_BFu15i)
//============================================================================


struct  BFu15i_BFs15s_BFu15i_BFu15ll  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15i_BFu15ll) C1{ Fi:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15i_BFs15s_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15i_BFu15ll, BFu15i_BFs15s_BFu15i_BFu15ll)
//============================================================================


struct  BFu15i_BFs15s_BFu15i_BFu15s  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15i_BFu15s) C1{ Fi:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15i_BFs15s_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15i_BFu15s, BFu15i_BFs15s_BFu15i_BFu15s)
//============================================================================


struct  BFu15i_BFs15s_BFu15ll  {
  unsigned int v1:15;
  signed short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFs15s_BFu15ll) C1{ Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15ll, BFu15i_BFs15s_BFu15ll)
//============================================================================


struct  BFu15i_BFs15s_BFu15ll_BFs15i  {
  unsigned int v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15ll_BFs15i) C1{ Fi:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15s_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15ll_BFs15i, BFu15i_BFs15s_BFu15ll_BFs15i)
//============================================================================


struct  BFu15i_BFs15s_BFu15ll_BFs15ll  {
  unsigned int v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15ll_BFs15ll) C1{ Fi:15 Fs:15 FL:15 FL:15}



static void Test_BFu15i_BFs15s_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15ll_BFs15ll, BFu15i_BFs15s_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFs15s_BFu15ll_BFs15s  {
  unsigned int v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15ll_BFs15s) C1{ Fi:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15s_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15ll_BFs15s, BFu15i_BFs15s_BFu15ll_BFs15s)
//============================================================================


struct  BFu15i_BFs15s_BFu15ll_BFu15i  {
  unsigned int v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15ll_BFu15i) C1{ Fi:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15i_BFs15s_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15ll_BFu15i, BFu15i_BFs15s_BFu15ll_BFu15i)
//============================================================================


struct  BFu15i_BFs15s_BFu15ll_BFu15ll  {
  unsigned int v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15ll_BFu15ll) C1{ Fi:15 Fs:15 FL:15 FL:15}



static void Test_BFu15i_BFs15s_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15ll_BFu15ll, BFu15i_BFs15s_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFs15s_BFu15ll_BFu15s  {
  unsigned int v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15ll_BFu15s) C1{ Fi:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15i_BFs15s_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15ll_BFu15s, BFu15i_BFs15s_BFu15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15s, BFu15i_BFs15s_BFu15s)
//============================================================================


struct  BFu15i_BFs15s_BFu15s_BFs15i  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15s_BFs15i) C1{ Fi:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15s_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15s_BFs15i, BFu15i_BFs15s_BFu15s_BFs15i)
//============================================================================


struct  BFu15i_BFs15s_BFu15s_BFs15ll  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15s_BFs15ll) C1{ Fi:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15s_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15s_BFs15ll, BFu15i_BFs15s_BFu15s_BFs15ll)
//============================================================================


struct  BFu15i_BFs15s_BFu15s_BFs15s  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15s_BFs15s) C1{ Fi:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15s_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15s_BFs15s, BFu15i_BFs15s_BFu15s_BFs15s)
//============================================================================


struct  BFu15i_BFs15s_BFu15s_BFu15i  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15s_BFu15i) C1{ Fi:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15i_BFs15s_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15s_BFu15i, BFu15i_BFs15s_BFu15s_BFu15i)
//============================================================================


struct  BFu15i_BFs15s_BFu15s_BFu15ll  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15s_BFu15ll) C1{ Fi:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15i_BFs15s_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFs15s_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15s_BFu15ll, BFu15i_BFs15s_BFu15s_BFu15ll)
//============================================================================


struct  BFu15i_BFs15s_BFu15s_BFu15s  {
  unsigned int v1:15;
  signed short v2:15;
  unsigned short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFs15s_BFu15s_BFu15s) C1{ Fi:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15i_BFs15s_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFs15s_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFs15s_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFs15s_BFu15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFs15s_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFs15s_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFs15s_BFu15s_BFu15s, BFu15i_BFs15s_BFu15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i, BFu15i_BFu15i)
//============================================================================


struct  BFu15i_BFu15i_BFs15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed int v3:15;
};
//SIG(1 BFu15i_BFu15i_BFs15i) C1{ Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15i, BFu15i_BFu15i_BFs15i)
//============================================================================


struct  BFu15i_BFu15i_BFs15i_BFs15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15i_BFs15i) C1{ Fi:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15i_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15i_BFs15i, BFu15i_BFu15i_BFs15i_BFs15i)
//============================================================================


struct  BFu15i_BFu15i_BFs15i_BFs15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15i_BFs15ll) C1{ Fi:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15i_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15i_BFs15ll, BFu15i_BFu15i_BFs15i_BFs15ll)
//============================================================================


struct  BFu15i_BFu15i_BFs15i_BFs15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15i_BFs15s) C1{ Fi:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15i_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15i_BFs15s, BFu15i_BFu15i_BFs15i_BFs15s)
//============================================================================


struct  BFu15i_BFu15i_BFs15i_BFu15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15i_BFu15i) C1{ Fi:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15i_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15i_BFu15i, BFu15i_BFu15i_BFs15i_BFu15i)
//============================================================================


struct  BFu15i_BFu15i_BFs15i_BFu15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15i_BFu15ll) C1{ Fi:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15i_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15i_BFu15ll, BFu15i_BFu15i_BFs15i_BFu15ll)
//============================================================================


struct  BFu15i_BFu15i_BFs15i_BFu15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15i_BFu15s) C1{ Fi:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15i_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15i_BFu15s, BFu15i_BFu15i_BFs15i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15ll, BFu15i_BFu15i_BFs15ll)
//============================================================================


struct  BFu15i_BFu15i_BFs15ll_BFs15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15ll_BFs15i) C1{ Fi:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15i_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15ll_BFs15i, BFu15i_BFu15i_BFs15ll_BFs15i)
//============================================================================


struct  BFu15i_BFu15i_BFs15ll_BFs15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15ll_BFs15ll) C1{ Fi:15 Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFu15i_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15ll_BFs15ll, BFu15i_BFu15i_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFu15i_BFs15ll_BFs15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15ll_BFs15s) C1{ Fi:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15i_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15ll_BFs15s, BFu15i_BFu15i_BFs15ll_BFs15s)
//============================================================================


struct  BFu15i_BFu15i_BFs15ll_BFu15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15ll_BFu15i) C1{ Fi:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15i_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15ll_BFu15i, BFu15i_BFu15i_BFs15ll_BFu15i)
//============================================================================


struct  BFu15i_BFu15i_BFs15ll_BFu15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15ll_BFu15ll) C1{ Fi:15 Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFu15i_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15ll_BFu15ll, BFu15i_BFu15i_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu15i_BFs15ll_BFu15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15ll_BFu15s) C1{ Fi:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15i_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15ll_BFu15s, BFu15i_BFu15i_BFs15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15s, BFu15i_BFu15i_BFs15s)
//============================================================================


struct  BFu15i_BFu15i_BFs15s_BFs15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15s_BFs15i) C1{ Fi:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15i_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15s_BFs15i, BFu15i_BFu15i_BFs15s_BFs15i)
//============================================================================


struct  BFu15i_BFu15i_BFs15s_BFs15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15s_BFs15ll) C1{ Fi:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15i_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15s_BFs15ll, BFu15i_BFu15i_BFs15s_BFs15ll)
//============================================================================


struct  BFu15i_BFu15i_BFs15s_BFs15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15s_BFs15s) C1{ Fi:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15i_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15s_BFs15s, BFu15i_BFu15i_BFs15s_BFs15s)
//============================================================================


struct  BFu15i_BFu15i_BFs15s_BFu15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15s_BFu15i) C1{ Fi:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15i_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15s_BFu15i, BFu15i_BFu15i_BFs15s_BFu15i)
//============================================================================


struct  BFu15i_BFu15i_BFs15s_BFu15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15s_BFu15ll) C1{ Fi:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15i_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15s_BFu15ll, BFu15i_BFu15i_BFs15s_BFu15ll)
//============================================================================


struct  BFu15i_BFu15i_BFs15s_BFu15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFs15s_BFu15s) C1{ Fi:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15i_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFs15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFs15s_BFu15s, BFu15i_BFu15i_BFs15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15i, BFu15i_BFu15i_BFu15i)
//============================================================================


struct  BFu15i_BFu15i_BFu15i_BFs15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15i_BFs15i) C1{ Fi:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15i_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15i_BFs15i, BFu15i_BFu15i_BFu15i_BFs15i)
//============================================================================


struct  BFu15i_BFu15i_BFu15i_BFs15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15i_BFs15ll) C1{ Fi:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15i_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15i_BFs15ll, BFu15i_BFu15i_BFu15i_BFs15ll)
//============================================================================


struct  BFu15i_BFu15i_BFu15i_BFs15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15i_BFs15s) C1{ Fi:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15i_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15i_BFs15s, BFu15i_BFu15i_BFu15i_BFs15s)
//============================================================================


struct  BFu15i_BFu15i_BFu15i_BFu15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15i_BFu15i) C1{ Fi:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15i_BFu15i, BFu15i_BFu15i_BFu15i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15i_BFu15ll, BFu15i_BFu15i_BFu15i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15i_BFu15s, BFu15i_BFu15i_BFu15i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15ll, BFu15i_BFu15i_BFu15ll)
//============================================================================


struct  BFu15i_BFu15i_BFu15ll_BFs15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15ll_BFs15i) C1{ Fi:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15i_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15ll_BFs15i, BFu15i_BFu15i_BFu15ll_BFs15i)
//============================================================================


struct  BFu15i_BFu15i_BFu15ll_BFs15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15ll_BFs15ll) C1{ Fi:15 Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFu15i_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15ll_BFs15ll, BFu15i_BFu15i_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFu15i_BFu15ll_BFs15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15ll_BFs15s) C1{ Fi:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15i_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15ll_BFs15s, BFu15i_BFu15i_BFu15ll_BFs15s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15ll_BFu15i, BFu15i_BFu15i_BFu15ll_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15ll_BFu15ll, BFu15i_BFu15i_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu15i_BFu15ll_BFu15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15ll_BFu15s) C1{ Fi:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15ll_BFu15s, BFu15i_BFu15i_BFu15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15s, BFu15i_BFu15i_BFu15s)
//============================================================================


struct  BFu15i_BFu15i_BFu15s_BFs15i  {
  unsigned int v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15s_BFs15i) C1{ Fi:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15i_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15s_BFs15i, BFu15i_BFu15i_BFu15s_BFs15i)
//============================================================================


struct  BFu15i_BFu15i_BFu15s_BFs15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15s_BFs15ll) C1{ Fi:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15i_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15s_BFs15ll, BFu15i_BFu15i_BFu15s_BFs15ll)
//============================================================================


struct  BFu15i_BFu15i_BFu15s_BFs15s  {
  unsigned int v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15s_BFs15s) C1{ Fi:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15i_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15i_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15s_BFs15s, BFu15i_BFu15i_BFu15s_BFs15s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15s_BFu15i, BFu15i_BFu15i_BFu15s_BFu15i)
//============================================================================


struct  BFu15i_BFu15i_BFu15s_BFu15ll  {
  unsigned int v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15i_BFu15s_BFu15ll) C1{ Fi:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15s_BFu15ll, BFu15i_BFu15i_BFu15s_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu15s_BFu15s, BFu15i_BFu15i_BFu15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu16i, BFu15i_BFu15i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 6, 16, 1, "BFu15i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 6, 16, hide_ull(1LL<<15), "BFu15i_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu16ll, BFu15i_BFu15i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu16s, BFu15i_BFu15i_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu17i, BFu15i_BFu15i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 6, 17, 1, "BFu15i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 6, 17, hide_ull(1LL<<16), "BFu15i_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu17ll, BFu15i_BFu15i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15i_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu1c, BFu15i_BFu15i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15i_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu1i, BFu15i_BFu15i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15i_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu1ll, BFu15i_BFu15i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15i_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu1s, BFu15i_BFu15i_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu31i, BFu15i_BFu15i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 6, 31, 1, "BFu15i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 6, 31, hide_ull(1LL<<30), "BFu15i_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu31ll, BFu15i_BFu15i_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu32i, BFu15i_BFu15i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 6, 32, 1, "BFu15i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 6, 32, hide_ull(1LL<<31), "BFu15i_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu32ll, BFu15i_BFu15i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu33");
    static STRUCT_IF_C BFu15i_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 3, 6, 33, 1, "BFu15i_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 3, 6, 33, hide_ull(1LL<<32), "BFu15i_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu33, BFu15i_BFu15i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu15i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu7c, BFu15i_BFu15i_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu7i, BFu15i_BFu15i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 6, 7, 1, "BFu15i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu7ll, BFu15i_BFu15i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu7s, BFu15i_BFu15i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu15i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu8c, BFu15i_BFu15i_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu8i, BFu15i_BFu15i_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 6, 8, 1, "BFu15i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu8ll, BFu15i_BFu15i_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu8s, BFu15i_BFu15i_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu15i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu9i, BFu15i_BFu15i_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu15i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 6, 9, 1, "BFu15i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu9ll, BFu15i_BFu15i_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu15i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu15i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_BFu9s, BFu15i_BFu15i_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu15i_C()
{
  {
    init_simple_test("BFu15i_BFu15i_C");
    static STRUCT_IF_C BFu15i_BFu15i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_C");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_C");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_C, BFu15i_BFu15i_C)
//============================================================================


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



static void Test_BFu15i_BFu15i_D()
{
  {
    init_simple_test("BFu15i_BFu15i_D");
    static STRUCT_IF_C BFu15i_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_D");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_D");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_D, BFu15i_BFu15i_D)
//============================================================================


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



static void Test_BFu15i_BFu15i_F()
{
  {
    init_simple_test("BFu15i_BFu15i_F");
    static STRUCT_IF_C BFu15i_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_F");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_F");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_F, BFu15i_BFu15i_F)
//============================================================================


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



static void Test_BFu15i_BFu15i_I()
{
  {
    init_simple_test("BFu15i_BFu15i_I");
    static STRUCT_IF_C BFu15i_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_I");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_I");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_I, BFu15i_BFu15i_I)
//============================================================================


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



static void Test_BFu15i_BFu15i_Ip()
{
  {
    init_simple_test("BFu15i_BFu15i_Ip");
    static STRUCT_IF_C BFu15i_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_Ip, BFu15i_BFu15i_Ip)
//============================================================================


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



static void Test_BFu15i_BFu15i_L()
{
  {
    init_simple_test("BFu15i_BFu15i_L");
    static STRUCT_IF_C BFu15i_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_L");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_L");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_L, BFu15i_BFu15i_L)
//============================================================================


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



static void Test_BFu15i_BFu15i_S()
{
  {
    init_simple_test("BFu15i_BFu15i_S");
    static STRUCT_IF_C BFu15i_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_S");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_S");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_S, BFu15i_BFu15i_S)
//============================================================================


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



static void Test_BFu15i_BFu15i_Uc()
{
  {
    init_simple_test("BFu15i_BFu15i_Uc");
    static STRUCT_IF_C BFu15i_BFu15i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_Uc, BFu15i_BFu15i_Uc)
//============================================================================


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



static void Test_BFu15i_BFu15i_Ui()
{
  {
    init_simple_test("BFu15i_BFu15i_Ui");
    static STRUCT_IF_C BFu15i_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_Ui, BFu15i_BFu15i_Ui)
//============================================================================


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



static void Test_BFu15i_BFu15i_Ul()
{
  {
    init_simple_test("BFu15i_BFu15i_Ul");
    static STRUCT_IF_C BFu15i_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_Ul, BFu15i_BFu15i_Ul)
//============================================================================


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



static void Test_BFu15i_BFu15i_Us()
{
  {
    init_simple_test("BFu15i_BFu15i_Us");
    static STRUCT_IF_C BFu15i_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Us");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_Us");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_Us, BFu15i_BFu15i_Us)
//============================================================================


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



static void Test_BFu15i_BFu15i_Vp()
{
  {
    init_simple_test("BFu15i_BFu15i_Vp");
    static STRUCT_IF_C BFu15i_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15i_Vp, BFu15i_BFu15i_Vp)
//============================================================================


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



static void Test_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll, BFu15i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15i, BFu15i_BFu15ll_BFs15i)
//============================================================================


struct  BFu15i_BFu15ll_BFs15i_BFs15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15i_BFs15i) C1{ Fi:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15i_BFs15i, BFu15i_BFu15ll_BFs15i_BFs15i)
//============================================================================


struct  BFu15i_BFu15ll_BFs15i_BFs15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15i_BFs15ll) C1{ Fi:15 FL:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15ll_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15i_BFs15ll, BFu15i_BFu15ll_BFs15i_BFs15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFs15i_BFs15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15i_BFs15s) C1{ Fi:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15i_BFs15s, BFu15i_BFu15ll_BFs15i_BFs15s)
//============================================================================


struct  BFu15i_BFu15ll_BFs15i_BFu15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15i_BFu15i) C1{ Fi:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15i_BFu15i, BFu15i_BFu15ll_BFs15i_BFu15i)
//============================================================================


struct  BFu15i_BFu15ll_BFs15i_BFu15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15i_BFu15ll) C1{ Fi:15 FL:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15ll_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15i_BFu15ll, BFu15i_BFu15ll_BFs15i_BFu15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFs15i_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15i_BFu15s) C1{ Fi:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15i_BFu15s, BFu15i_BFu15ll_BFs15i_BFu15s)
//============================================================================


struct  BFu15i_BFu15ll_BFs15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15ll) C1{ Fi:15 FL:15 FL:15}



static void Test_BFu15i_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15ll, BFu15i_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFs15ll_BFs15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15ll_BFs15i) C1{ Fi:15 FL:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15ll_BFs15i, BFu15i_BFu15ll_BFs15ll_BFs15i)
//============================================================================


struct  BFu15i_BFu15ll_BFs15ll_BFs15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15ll_BFs15ll) C1{ Fi:15 FL:15 FL:15 FL:15}



static void Test_BFu15i_BFu15ll_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15ll_BFs15ll, BFu15i_BFu15ll_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFs15ll_BFs15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15ll_BFs15s) C1{ Fi:15 FL:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15ll_BFs15s, BFu15i_BFu15ll_BFs15ll_BFs15s)
//============================================================================


struct  BFu15i_BFu15ll_BFs15ll_BFu15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15ll_BFu15i) C1{ Fi:15 FL:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15ll_BFu15i, BFu15i_BFu15ll_BFs15ll_BFu15i)
//============================================================================


struct  BFu15i_BFu15ll_BFs15ll_BFu15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15ll_BFu15ll) C1{ Fi:15 FL:15 FL:15 FL:15}



static void Test_BFu15i_BFu15ll_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15ll_BFu15ll, BFu15i_BFu15ll_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFs15ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15ll_BFu15s) C1{ Fi:15 FL:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15ll_BFu15s, BFu15i_BFu15ll_BFs15ll_BFu15s)
//============================================================================


struct  BFu15i_BFu15ll_BFs15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed short v3:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15s) C1{ Fi:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15s, BFu15i_BFu15ll_BFs15s)
//============================================================================


struct  BFu15i_BFu15ll_BFs15s_BFs15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15s_BFs15i) C1{ Fi:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15s_BFs15i, BFu15i_BFu15ll_BFs15s_BFs15i)
//============================================================================


struct  BFu15i_BFu15ll_BFs15s_BFs15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15s_BFs15ll) C1{ Fi:15 FL:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15ll_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15s_BFs15ll, BFu15i_BFu15ll_BFs15s_BFs15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFs15s_BFs15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15s_BFs15s) C1{ Fi:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15s_BFs15s, BFu15i_BFu15ll_BFs15s_BFs15s)
//============================================================================


struct  BFu15i_BFu15ll_BFs15s_BFu15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15s_BFu15i) C1{ Fi:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15s_BFu15i, BFu15i_BFu15ll_BFs15s_BFu15i)
//============================================================================


struct  BFu15i_BFu15ll_BFs15s_BFu15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15s_BFu15ll) C1{ Fi:15 FL:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15ll_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15s_BFu15ll, BFu15i_BFu15ll_BFs15s_BFu15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFs15s_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFs15s_BFu15s) C1{ Fi:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFs15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFs15s_BFu15s, BFu15i_BFu15ll_BFs15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15i, BFu15i_BFu15ll_BFu15i)
//============================================================================


struct  BFu15i_BFu15ll_BFu15i_BFs15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15i_BFs15i) C1{ Fi:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15i_BFs15i, BFu15i_BFu15ll_BFu15i_BFs15i)
//============================================================================


struct  BFu15i_BFu15ll_BFu15i_BFs15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15i_BFs15ll) C1{ Fi:15 FL:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15ll_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15i_BFs15ll, BFu15i_BFu15ll_BFu15i_BFs15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu15i_BFs15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15i_BFs15s) C1{ Fi:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15i_BFs15s, BFu15i_BFu15ll_BFu15i_BFs15s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15i_BFu15i, BFu15i_BFu15ll_BFu15i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15i_BFu15ll, BFu15i_BFu15ll_BFu15i_BFu15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu15i_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15i_BFu15s) C1{ Fi:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15i_BFu15s, BFu15i_BFu15ll_BFu15i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15ll, BFu15i_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu15ll_BFs15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15ll_BFs15i) C1{ Fi:15 FL:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15ll_BFs15i, BFu15i_BFu15ll_BFu15ll_BFs15i)
//============================================================================


struct  BFu15i_BFu15ll_BFu15ll_BFs15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15ll_BFs15ll) C1{ Fi:15 FL:15 FL:15 FL:15}



static void Test_BFu15i_BFu15ll_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15ll_BFs15ll, BFu15i_BFu15ll_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu15ll_BFs15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15ll_BFs15s) C1{ Fi:15 FL:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15ll_BFs15s, BFu15i_BFu15ll_BFu15ll_BFs15s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15ll_BFu15i, BFu15i_BFu15ll_BFu15ll_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15ll_BFu15ll, BFu15i_BFu15ll_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu15ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15ll_BFu15s) C1{ Fi:15 FL:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15ll_BFu15s, BFu15i_BFu15ll_BFu15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15s, BFu15i_BFu15ll_BFu15s)
//============================================================================


struct  BFu15i_BFu15ll_BFu15s_BFs15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15s_BFs15i) C1{ Fi:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15s_BFs15i, BFu15i_BFu15ll_BFu15s_BFs15i)
//============================================================================


struct  BFu15i_BFu15ll_BFu15s_BFs15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15s_BFs15ll) C1{ Fi:15 FL:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15ll_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15s_BFs15ll, BFu15i_BFu15ll_BFu15s_BFs15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu15s_BFs15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15s_BFs15s) C1{ Fi:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15s_BFs15s, BFu15i_BFu15ll_BFu15s_BFs15s)
//============================================================================


struct  BFu15i_BFu15ll_BFu15s_BFu15i  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15s_BFu15i) C1{ Fi:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15ll_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15s_BFu15i, BFu15i_BFu15ll_BFu15s_BFu15i)
//============================================================================


struct  BFu15i_BFu15ll_BFu15s_BFu15ll  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15s_BFu15ll) C1{ Fi:15 FL:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15ll_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15s_BFu15ll, BFu15i_BFu15ll_BFu15s_BFu15ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu15s_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15ll_BFu15s_BFu15s) C1{ Fi:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15ll_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu15s_BFu15s, BFu15i_BFu15ll_BFu15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu16i, BFu15i_BFu15ll_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 6, 16, 1, "BFu15i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 6, 16, hide_ull(1LL<<15), "BFu15i_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu16ll, BFu15i_BFu15ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu15ll_BFu16s) C1{ Fi:15 FL:15 Fs:16}



static void Test_BFu15i_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu16s, BFu15i_BFu15ll_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu17i, BFu15i_BFu15ll_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 6, 17, 1, "BFu15i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 6, 17, hide_ull(1LL<<16), "BFu15i_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu17ll, BFu15i_BFu15ll_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15i_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu1c, BFu15i_BFu15ll_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15i_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu1i, BFu15i_BFu15ll_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15i_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu1ll, BFu15i_BFu15ll_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15i_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu1s, BFu15i_BFu15ll_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu31i, BFu15i_BFu15ll_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 6, 31, 1, "BFu15i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 6, 31, hide_ull(1LL<<30), "BFu15i_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu31ll, BFu15i_BFu15ll_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu32i, BFu15i_BFu15ll_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 6, 32, 1, "BFu15i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 6, 32, hide_ull(1LL<<31), "BFu15i_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu32ll, BFu15i_BFu15ll_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 3, 6, 33, 1, "BFu15i_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 3, 6, 33, hide_ull(1LL<<32), "BFu15i_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu33, BFu15i_BFu15ll_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu7c, BFu15i_BFu15ll_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu7i, BFu15i_BFu15ll_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 6, 7, 1, "BFu15i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu7ll, BFu15i_BFu15ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu15ll_BFu7s) C1{ Fi:15 FL:15 Fs:7}



static void Test_BFu15i_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu7s, BFu15i_BFu15ll_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu8c, BFu15i_BFu15ll_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu8i, BFu15i_BFu15ll_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 6, 8, 1, "BFu15i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu8ll, BFu15i_BFu15ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu15ll_BFu8s) C1{ Fi:15 FL:15 Fs:8}



static void Test_BFu15i_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu8s, BFu15i_BFu15ll_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu9i, BFu15i_BFu15ll_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 6, 9, 1, "BFu15i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu9ll, BFu15i_BFu15ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu15ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu15ll_BFu9s) C1{ Fi:15 FL:15 Fs:9}



static void Test_BFu15i_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu15ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_BFu9s, BFu15i_BFu15ll_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu15ll_C()
{
  {
    init_simple_test("BFu15i_BFu15ll_C");
    static STRUCT_IF_C BFu15i_BFu15ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_C");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_C");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_C, BFu15i_BFu15ll_C)
//============================================================================


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



static void Test_BFu15i_BFu15ll_D()
{
  {
    init_simple_test("BFu15i_BFu15ll_D");
    static STRUCT_IF_C BFu15i_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_D");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_D");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_D, BFu15i_BFu15ll_D)
//============================================================================


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



static void Test_BFu15i_BFu15ll_F()
{
  {
    init_simple_test("BFu15i_BFu15ll_F");
    static STRUCT_IF_C BFu15i_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_F");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_F");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_F, BFu15i_BFu15ll_F)
//============================================================================


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



static void Test_BFu15i_BFu15ll_I()
{
  {
    init_simple_test("BFu15i_BFu15ll_I");
    static STRUCT_IF_C BFu15i_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_I");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_I");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_I, BFu15i_BFu15ll_I)
//============================================================================


struct  BFu15i_BFu15ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu15i_BFu15ll_Ip) C1{ Fi:15 FL:15 Fp}



static void Test_BFu15i_BFu15ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu15ll_Ip");
    static STRUCT_IF_C BFu15i_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_Ip, BFu15i_BFu15ll_Ip)
//============================================================================


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



static void Test_BFu15i_BFu15ll_L()
{
  {
    init_simple_test("BFu15i_BFu15ll_L");
    static STRUCT_IF_C BFu15i_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_L");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_L");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_L, BFu15i_BFu15ll_L)
//============================================================================


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



static void Test_BFu15i_BFu15ll_S()
{
  {
    init_simple_test("BFu15i_BFu15ll_S");
    static STRUCT_IF_C BFu15i_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_S");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_S");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_S, BFu15i_BFu15ll_S)
//============================================================================


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



static void Test_BFu15i_BFu15ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu15ll_Uc");
    static STRUCT_IF_C BFu15i_BFu15ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_Uc, BFu15i_BFu15ll_Uc)
//============================================================================


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



static void Test_BFu15i_BFu15ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu15ll_Ui");
    static STRUCT_IF_C BFu15i_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_Ui, BFu15i_BFu15ll_Ui)
//============================================================================


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



static void Test_BFu15i_BFu15ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu15ll_Ul");
    static STRUCT_IF_C BFu15i_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_Ul, BFu15i_BFu15ll_Ul)
//============================================================================


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



static void Test_BFu15i_BFu15ll_Us()
{
  {
    init_simple_test("BFu15i_BFu15ll_Us");
    static STRUCT_IF_C BFu15i_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_Us, BFu15i_BFu15ll_Us)
//============================================================================


struct  BFu15i_BFu15ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu15i_BFu15ll_Vp) C1{ Fi:15 FL:15 Fp}



static void Test_BFu15i_BFu15ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu15ll_Vp");
    static STRUCT_IF_C BFu15i_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15i_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15ll_Vp, BFu15i_BFu15ll_Vp)
//============================================================================


struct  BFu15i_BFu15s  {
  unsigned int v1:15;
  unsigned short v2:15;
};
//SIG(1 BFu15i_BFu15s) C1{ Fi:15 Fs:15}



static void Test_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s, BFu15i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15i, BFu15i_BFu15s_BFs15i)
//============================================================================


struct  BFu15i_BFu15s_BFs15i_BFs15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15i_BFs15i) C1{ Fi:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15s_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15i_BFs15i, BFu15i_BFu15s_BFs15i_BFs15i)
//============================================================================


struct  BFu15i_BFu15s_BFs15i_BFs15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15i_BFs15ll) C1{ Fi:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15s_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15i_BFs15ll, BFu15i_BFu15s_BFs15i_BFs15ll)
//============================================================================


struct  BFu15i_BFu15s_BFs15i_BFs15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15i_BFs15s) C1{ Fi:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15s_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15i_BFs15s, BFu15i_BFu15s_BFs15i_BFs15s)
//============================================================================


struct  BFu15i_BFu15s_BFs15i_BFu15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15i_BFu15i) C1{ Fi:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15s_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15i_BFu15i, BFu15i_BFu15s_BFs15i_BFu15i)
//============================================================================


struct  BFu15i_BFu15s_BFs15i_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15i_BFu15ll) C1{ Fi:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15s_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15i_BFu15ll, BFu15i_BFu15s_BFs15i_BFu15ll)
//============================================================================


struct  BFu15i_BFu15s_BFs15i_BFu15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15i_BFu15s) C1{ Fi:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15s_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15i_BFu15s, BFu15i_BFu15s_BFs15i_BFu15s)
//============================================================================


struct  BFu15i_BFu15s_BFs15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed __tsi64 v3:15;
};
//SIG(1 BFu15i_BFu15s_BFs15ll) C1{ Fi:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15ll, BFu15i_BFu15s_BFs15ll)
//============================================================================


struct  BFu15i_BFu15s_BFs15ll_BFs15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15ll_BFs15i) C1{ Fi:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15s_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15ll_BFs15i, BFu15i_BFu15s_BFs15ll_BFs15i)
//============================================================================


struct  BFu15i_BFu15s_BFs15ll_BFs15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15ll_BFs15ll) C1{ Fi:15 Fs:15 FL:15 FL:15}



static void Test_BFu15i_BFu15s_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15ll_BFs15ll, BFu15i_BFu15s_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFu15s_BFs15ll_BFs15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15ll_BFs15s) C1{ Fi:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15s_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15ll_BFs15s, BFu15i_BFu15s_BFs15ll_BFs15s)
//============================================================================


struct  BFu15i_BFu15s_BFs15ll_BFu15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15ll_BFu15i) C1{ Fi:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15s_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15ll_BFu15i, BFu15i_BFu15s_BFs15ll_BFu15i)
//============================================================================


struct  BFu15i_BFu15s_BFs15ll_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15ll_BFu15ll) C1{ Fi:15 Fs:15 FL:15 FL:15}



static void Test_BFu15i_BFu15s_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15ll_BFu15ll, BFu15i_BFu15s_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu15s_BFs15ll_BFu15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15ll_BFu15s) C1{ Fi:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15s_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15ll_BFu15s, BFu15i_BFu15s_BFs15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15s, BFu15i_BFu15s_BFs15s)
//============================================================================


struct  BFu15i_BFu15s_BFs15s_BFs15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15s_BFs15i) C1{ Fi:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15s_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15s_BFs15i, BFu15i_BFu15s_BFs15s_BFs15i)
//============================================================================


struct  BFu15i_BFu15s_BFs15s_BFs15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15s_BFs15ll) C1{ Fi:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15s_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15s_BFs15ll, BFu15i_BFu15s_BFs15s_BFs15ll)
//============================================================================


struct  BFu15i_BFu15s_BFs15s_BFs15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15s_BFs15s) C1{ Fi:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15s_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15s_BFs15s, BFu15i_BFu15s_BFs15s_BFs15s)
//============================================================================


struct  BFu15i_BFu15s_BFs15s_BFu15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15s_BFu15i) C1{ Fi:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15s_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15s_BFu15i, BFu15i_BFu15s_BFs15s_BFu15i)
//============================================================================


struct  BFu15i_BFu15s_BFs15s_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15s_BFu15ll) C1{ Fi:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15s_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15s_BFu15ll, BFu15i_BFu15s_BFs15s_BFu15ll)
//============================================================================


struct  BFu15i_BFu15s_BFs15s_BFu15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFs15s_BFu15s) C1{ Fi:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15s_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFs15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFs15s_BFu15s, BFu15i_BFu15s_BFs15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15i, BFu15i_BFu15s_BFu15i)
//============================================================================


struct  BFu15i_BFu15s_BFu15i_BFs15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15i_BFs15i) C1{ Fi:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15i_BFu15s_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15i_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15i_BFs15i, BFu15i_BFu15s_BFu15i_BFs15i)
//============================================================================


struct  BFu15i_BFu15s_BFu15i_BFs15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15i_BFs15ll) C1{ Fi:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15s_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15i_BFs15ll, BFu15i_BFu15s_BFu15i_BFs15ll)
//============================================================================


struct  BFu15i_BFu15s_BFu15i_BFs15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15i_BFs15s) C1{ Fi:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15i_BFu15s_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15i_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15i_BFs15s, BFu15i_BFu15s_BFu15i_BFs15s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15i_BFu15i, BFu15i_BFu15s_BFu15i_BFu15i)
//============================================================================


struct  BFu15i_BFu15s_BFu15i_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  unsigned int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15i_BFu15ll) C1{ Fi:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15i_BFu15s_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15i_BFu15ll, BFu15i_BFu15s_BFu15i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15i_BFu15s, BFu15i_BFu15s_BFu15i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15ll, BFu15i_BFu15s_BFu15ll)
//============================================================================


struct  BFu15i_BFu15s_BFu15ll_BFs15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15ll_BFs15i) C1{ Fi:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15s_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15ll_BFs15i, BFu15i_BFu15s_BFu15ll_BFs15i)
//============================================================================


struct  BFu15i_BFu15s_BFu15ll_BFs15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15ll_BFs15ll) C1{ Fi:15 Fs:15 FL:15 FL:15}



static void Test_BFu15i_BFu15s_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15ll_BFs15ll, BFu15i_BFu15s_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15i_BFu15s_BFu15ll_BFs15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15ll_BFs15s) C1{ Fi:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15s_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15ll_BFs15s, BFu15i_BFu15s_BFu15ll_BFs15s)
//============================================================================


struct  BFu15i_BFu15s_BFu15ll_BFu15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15ll_BFu15i) C1{ Fi:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15i_BFu15s_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15ll_BFu15i, BFu15i_BFu15s_BFu15ll_BFu15i)
//============================================================================


struct  BFu15i_BFu15s_BFu15ll_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15ll_BFu15ll) C1{ Fi:15 Fs:15 FL:15 FL:15}



static void Test_BFu15i_BFu15s_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15ll_BFu15ll, BFu15i_BFu15s_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu15s_BFu15ll_BFu15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15ll_BFu15s) C1{ Fi:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15i_BFu15s_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15ll_BFu15s, BFu15i_BFu15s_BFu15ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15s, BFu15i_BFu15s_BFu15s)
//============================================================================


struct  BFu15i_BFu15s_BFu15s_BFs15i  {
  unsigned int v1:15;
  unsigned short v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15s_BFs15i) C1{ Fi:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15i_BFu15s_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15s_BFs15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15s_BFs15i, BFu15i_BFu15s_BFu15s_BFs15i)
//============================================================================


struct  BFu15i_BFu15s_BFu15s_BFs15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15s_BFs15ll) C1{ Fi:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15s_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15s_BFs15ll, BFu15i_BFu15s_BFu15s_BFs15ll)
//============================================================================


struct  BFu15i_BFu15s_BFu15s_BFs15s  {
  unsigned int v1:15;
  unsigned short v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15s_BFs15s) C1{ Fi:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15i_BFu15s_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15s_BFs15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15i_BFu15s_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15s_BFs15s, BFu15i_BFu15s_BFu15s_BFs15s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15s_BFu15i, BFu15i_BFu15s_BFu15s_BFu15i)
//============================================================================


struct  BFu15i_BFu15s_BFu15s_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15i_BFu15s_BFu15s_BFu15ll) C1{ Fi:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15i_BFu15s_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15s_BFu15ll, BFu15i_BFu15s_BFu15s_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15i_BFu15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu15s_BFu15s, BFu15i_BFu15s_BFu15s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu16i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu16i, BFu15i_BFu15s_BFu16i)
//============================================================================


struct  BFu15i_BFu15s_BFu16ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu15s_BFu16ll) C1{ Fi:15 Fs:15 FL:16}



static void Test_BFu15i_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu15i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu16ll, BFu15i_BFu15s_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu16s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu16s, BFu15i_BFu15s_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu17i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu17i, BFu15i_BFu15s_BFu17i)
//============================================================================


struct  BFu15i_BFu15s_BFu17ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu15s_BFu17ll) C1{ Fi:15 Fs:15 FL:17}



static void Test_BFu15i_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu15i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu17ll, BFu15i_BFu15s_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu1c");
    static STRUCT_IF_C BFu15i_BFu15s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu15s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu1c, BFu15i_BFu15s_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu1i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu1i, BFu15i_BFu15s_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu1ll, BFu15i_BFu15s_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu1s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu15s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu1s, BFu15i_BFu15s_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu31i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu31i, BFu15i_BFu15s_BFu31i)
//============================================================================


struct  BFu15i_BFu15s_BFu31ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu15s_BFu31ll) C1{ Fi:15 Fs:15 FL:31}



static void Test_BFu15i_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu15i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu31ll, BFu15i_BFu15s_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu32i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu32i, BFu15i_BFu15s_BFu32i)
//============================================================================


struct  BFu15i_BFu15s_BFu32ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu15s_BFu32ll) C1{ Fi:15 Fs:15 FL:32}



static void Test_BFu15i_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu15i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu32ll, BFu15i_BFu15s_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu33()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu33");
    static STRUCT_IF_C BFu15i_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu15i_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu33, BFu15i_BFu15s_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu7c");
    static STRUCT_IF_C BFu15i_BFu15s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu7c, BFu15i_BFu15s_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu7i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu7i, BFu15i_BFu15s_BFu7i)
//============================================================================


struct  BFu15i_BFu15s_BFu7ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu15s_BFu7ll) C1{ Fi:15 Fs:15 FL:7}



static void Test_BFu15i_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu15i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu7ll, BFu15i_BFu15s_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu7s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu7s, BFu15i_BFu15s_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu8c");
    static STRUCT_IF_C BFu15i_BFu15s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu8c, BFu15i_BFu15s_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu8i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu8i, BFu15i_BFu15s_BFu8i)
//============================================================================


struct  BFu15i_BFu15s_BFu8ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu15s_BFu8ll) C1{ Fi:15 Fs:15 FL:8}



static void Test_BFu15i_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu15i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu8ll, BFu15i_BFu15s_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu8s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu8s, BFu15i_BFu15s_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu9i");
    static STRUCT_IF_C BFu15i_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu9i, BFu15i_BFu15s_BFu9i)
//============================================================================


struct  BFu15i_BFu15s_BFu9ll  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu15s_BFu9ll) C1{ Fi:15 Fs:15 FL:9}



static void Test_BFu15i_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu15i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu9ll, BFu15i_BFu15s_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu15s_BFu9s");
    static STRUCT_IF_C BFu15i_BFu15s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_BFu9s, BFu15i_BFu15s_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu15s_C()
{
  {
    init_simple_test("BFu15i_BFu15s_C");
    static STRUCT_IF_C BFu15i_BFu15s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_C, BFu15i_BFu15s_C)
//============================================================================


struct  BFu15i_BFu15s_D  {
  unsigned int v1:15;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu15i_BFu15s_D) C1{ Fi:15 Fs:15 FL}



static void Test_BFu15i_BFu15s_D()
{
  {
    init_simple_test("BFu15i_BFu15s_D");
    static STRUCT_IF_C BFu15i_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_D, BFu15i_BFu15s_D)
//============================================================================


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



static void Test_BFu15i_BFu15s_F()
{
  {
    init_simple_test("BFu15i_BFu15s_F");
    static STRUCT_IF_C BFu15i_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_F, BFu15i_BFu15s_F)
//============================================================================


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



static void Test_BFu15i_BFu15s_I()
{
  {
    init_simple_test("BFu15i_BFu15s_I");
    static STRUCT_IF_C BFu15i_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_I, BFu15i_BFu15s_I)
//============================================================================


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



static void Test_BFu15i_BFu15s_Ip()
{
  {
    init_simple_test("BFu15i_BFu15s_Ip");
    static STRUCT_IF_C BFu15i_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_Ip, BFu15i_BFu15s_Ip)
//============================================================================


struct  BFu15i_BFu15s_L  {
  unsigned int v1:15;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu15s_L) C1{ Fi:15 Fs:15 FL}



static void Test_BFu15i_BFu15s_L()
{
  {
    init_simple_test("BFu15i_BFu15s_L");
    static STRUCT_IF_C BFu15i_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_L, BFu15i_BFu15s_L)
//============================================================================


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



static void Test_BFu15i_BFu15s_S()
{
  {
    init_simple_test("BFu15i_BFu15s_S");
    static STRUCT_IF_C BFu15i_BFu15s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_S, BFu15i_BFu15s_S)
//============================================================================


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



static void Test_BFu15i_BFu15s_Uc()
{
  {
    init_simple_test("BFu15i_BFu15s_Uc");
    static STRUCT_IF_C BFu15i_BFu15s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_Uc, BFu15i_BFu15s_Uc)
//============================================================================


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



static void Test_BFu15i_BFu15s_Ui()
{
  {
    init_simple_test("BFu15i_BFu15s_Ui");
    static STRUCT_IF_C BFu15i_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_Ui, BFu15i_BFu15s_Ui)
//============================================================================


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



static void Test_BFu15i_BFu15s_Ul()
{
  {
    init_simple_test("BFu15i_BFu15s_Ul");
    static STRUCT_IF_C BFu15i_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_Ul, BFu15i_BFu15s_Ul)
//============================================================================


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



static void Test_BFu15i_BFu15s_Us()
{
  {
    init_simple_test("BFu15i_BFu15s_Us");
    static STRUCT_IF_C BFu15i_BFu15s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu15s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_Us, BFu15i_BFu15s_Us)
//============================================================================


struct  BFu15i_BFu15s_Vp  {
  unsigned int v1:15;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu15i_BFu15s_Vp) C1{ Fi:15 Fs:15 Fp}



static void Test_BFu15i_BFu15s_Vp()
{
  {
    init_simple_test("BFu15i_BFu15s_Vp");
    static STRUCT_IF_C BFu15i_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15i_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu15s_Vp, BFu15i_BFu15s_Vp)
//============================================================================


struct  BFu15i_BFu16i  {
  unsigned int v1:15;
  unsigned int v2:16;
};
//SIG(1 BFu15i_BFu16i) C1{ Fi:15 Fi:16}



static void Test_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i, BFu15i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu15i, BFu15i_BFu16i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu15ll, BFu15i_BFu16i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu15s, BFu15i_BFu16i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu16i, BFu15i_BFu16i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu15i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu16ll, BFu15i_BFu16i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu16s, BFu15i_BFu16i_BFu16s)
//============================================================================


struct  BFu15i_BFu16i_BFu17i  {
  unsigned int v1:15;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu16i_BFu17i) C1{ Fi:15 Fi:16 Fi:17}



static void Test_BFu15i_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu17i, BFu15i_BFu16i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu15i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu17ll, BFu15i_BFu16i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu1c, BFu15i_BFu16i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu1i, BFu15i_BFu16i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu1ll, BFu15i_BFu16i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu1s, BFu15i_BFu16i_BFu1s)
//============================================================================


struct  BFu15i_BFu16i_BFu31i  {
  unsigned int v1:15;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu16i_BFu31i) C1{ Fi:15 Fi:16 Fi:31}



static void Test_BFu15i_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu31i, BFu15i_BFu16i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu15i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu31ll, BFu15i_BFu16i_BFu31ll)
//============================================================================


struct  BFu15i_BFu16i_BFu32i  {
  unsigned int v1:15;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu16i_BFu32i) C1{ Fi:15 Fi:16 Fi:32}



static void Test_BFu15i_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu32i, BFu15i_BFu16i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu15i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu32ll, BFu15i_BFu16i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu33");
    static STRUCT_IF_C BFu15i_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu15i_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu33, BFu15i_BFu16i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu16i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu7c, BFu15i_BFu16i_BFu7c)
//============================================================================


struct  BFu15i_BFu16i_BFu7i  {
  unsigned int v1:15;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu16i_BFu7i) C1{ Fi:15 Fi:16 Fi:7}



static void Test_BFu15i_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu7i, BFu15i_BFu16i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu15i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu7ll, BFu15i_BFu16i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu16i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu7s, BFu15i_BFu16i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu16i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu8c, BFu15i_BFu16i_BFu8c)
//============================================================================


struct  BFu15i_BFu16i_BFu8i  {
  unsigned int v1:15;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu16i_BFu8i) C1{ Fi:15 Fi:16 Fi:8}



static void Test_BFu15i_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu8i, BFu15i_BFu16i_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu15i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu8ll, BFu15i_BFu16i_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu16i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu8s, BFu15i_BFu16i_BFu8s)
//============================================================================


struct  BFu15i_BFu16i_BFu9i  {
  unsigned int v1:15;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu16i_BFu9i) C1{ Fi:15 Fi:16 Fi:9}



static void Test_BFu15i_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu16i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu9i, BFu15i_BFu16i_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu16i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu15i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu9ll, BFu15i_BFu16i_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu16i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu16i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_BFu9s, BFu15i_BFu16i_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu16i_C()
{
  {
    init_simple_test("BFu15i_BFu16i_C");
    static STRUCT_IF_C BFu15i_BFu16i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_C");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_C");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_C, BFu15i_BFu16i_C)
//============================================================================


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



static void Test_BFu15i_BFu16i_D()
{
  {
    init_simple_test("BFu15i_BFu16i_D");
    static STRUCT_IF_C BFu15i_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_D");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_D");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_D, BFu15i_BFu16i_D)
//============================================================================


struct  BFu15i_BFu16i_F  {
  unsigned int v1:15;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu15i_BFu16i_F) C1{ Fi:15 Fi:16 Fi}



static void Test_BFu15i_BFu16i_F()
{
  {
    init_simple_test("BFu15i_BFu16i_F");
    static STRUCT_IF_C BFu15i_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_F");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_F");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_F, BFu15i_BFu16i_F)
//============================================================================


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



static void Test_BFu15i_BFu16i_I()
{
  {
    init_simple_test("BFu15i_BFu16i_I");
    static STRUCT_IF_C BFu15i_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_I");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_I");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_I, BFu15i_BFu16i_I)
//============================================================================


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



static void Test_BFu15i_BFu16i_Ip()
{
  {
    init_simple_test("BFu15i_BFu16i_Ip");
    static STRUCT_IF_C BFu15i_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_Ip, BFu15i_BFu16i_Ip)
//============================================================================


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



static void Test_BFu15i_BFu16i_L()
{
  {
    init_simple_test("BFu15i_BFu16i_L");
    static STRUCT_IF_C BFu15i_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_L");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_L");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_L, BFu15i_BFu16i_L)
//============================================================================


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



static void Test_BFu15i_BFu16i_S()
{
  {
    init_simple_test("BFu15i_BFu16i_S");
    static STRUCT_IF_C BFu15i_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_S");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_S");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_S, BFu15i_BFu16i_S)
//============================================================================


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



static void Test_BFu15i_BFu16i_Uc()
{
  {
    init_simple_test("BFu15i_BFu16i_Uc");
    static STRUCT_IF_C BFu15i_BFu16i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_Uc, BFu15i_BFu16i_Uc)
//============================================================================


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



static void Test_BFu15i_BFu16i_Ui()
{
  {
    init_simple_test("BFu15i_BFu16i_Ui");
    static STRUCT_IF_C BFu15i_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_Ui, BFu15i_BFu16i_Ui)
//============================================================================


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



static void Test_BFu15i_BFu16i_Ul()
{
  {
    init_simple_test("BFu15i_BFu16i_Ul");
    static STRUCT_IF_C BFu15i_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_Ul, BFu15i_BFu16i_Ul)
//============================================================================


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



static void Test_BFu15i_BFu16i_Us()
{
  {
    init_simple_test("BFu15i_BFu16i_Us");
    static STRUCT_IF_C BFu15i_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_Us");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_Us");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_Us, BFu15i_BFu16i_Us)
//============================================================================


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



static void Test_BFu15i_BFu16i_Vp()
{
  {
    init_simple_test("BFu15i_BFu16i_Vp");
    static STRUCT_IF_C BFu15i_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16i_Vp, BFu15i_BFu16i_Vp)
//============================================================================


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



static void Test_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll, BFu15i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu15i, BFu15i_BFu16ll_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu15ll, BFu15i_BFu16ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu16ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu16ll_BFu15s) C1{ Fi:15 FL:16 Fs:15}



static void Test_BFu15i_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu15s, BFu15i_BFu16ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu16i, BFu15i_BFu16ll_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu15i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu16ll, BFu15i_BFu16ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu16ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu16ll_BFu16s) C1{ Fi:15 FL:16 Fs:16}



static void Test_BFu15i_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu16s, BFu15i_BFu16ll_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu17i, BFu15i_BFu16ll_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu15i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu17ll, BFu15i_BFu16ll_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu1c, BFu15i_BFu16ll_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu1i, BFu15i_BFu16ll_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu1ll, BFu15i_BFu16ll_BFu1ll)
//============================================================================


struct  BFu15i_BFu16ll_BFu1s  {
  unsigned int v1:15;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu16ll_BFu1s) C1{ Fi:15 FL:16 Fs:1}



static void Test_BFu15i_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu15i_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu1s, BFu15i_BFu16ll_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu31i, BFu15i_BFu16ll_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu15i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu31ll, BFu15i_BFu16ll_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu32i, BFu15i_BFu16ll_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu15i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu32ll, BFu15i_BFu16ll_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu15i_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu33, BFu15i_BFu16ll_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu7c, BFu15i_BFu16ll_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu7i, BFu15i_BFu16ll_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu15i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu7ll, BFu15i_BFu16ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu16ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu16ll_BFu7s) C1{ Fi:15 FL:16 Fs:7}



static void Test_BFu15i_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu7s, BFu15i_BFu16ll_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu8c, BFu15i_BFu16ll_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu8i, BFu15i_BFu16ll_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu15i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu8ll, BFu15i_BFu16ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu16ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu16ll_BFu8s) C1{ Fi:15 FL:16 Fs:8}



static void Test_BFu15i_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu8s, BFu15i_BFu16ll_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu9i, BFu15i_BFu16ll_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu15i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu9ll, BFu15i_BFu16ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu16ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu16ll_BFu9s) C1{ Fi:15 FL:16 Fs:9}



static void Test_BFu15i_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu16ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_BFu9s, BFu15i_BFu16ll_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu16ll_C()
{
  {
    init_simple_test("BFu15i_BFu16ll_C");
    static STRUCT_IF_C BFu15i_BFu16ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_C");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_C");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_C, BFu15i_BFu16ll_C)
//============================================================================


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



static void Test_BFu15i_BFu16ll_D()
{
  {
    init_simple_test("BFu15i_BFu16ll_D");
    static STRUCT_IF_C BFu15i_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_D");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_D");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_D, BFu15i_BFu16ll_D)
//============================================================================


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



static void Test_BFu15i_BFu16ll_F()
{
  {
    init_simple_test("BFu15i_BFu16ll_F");
    static STRUCT_IF_C BFu15i_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_F");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_F");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_F, BFu15i_BFu16ll_F)
//============================================================================


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



static void Test_BFu15i_BFu16ll_I()
{
  {
    init_simple_test("BFu15i_BFu16ll_I");
    static STRUCT_IF_C BFu15i_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_I");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_I");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_I, BFu15i_BFu16ll_I)
//============================================================================


struct  BFu15i_BFu16ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu15i_BFu16ll_Ip) C1{ Fi:15 FL:16 Fp}



static void Test_BFu15i_BFu16ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu16ll_Ip");
    static STRUCT_IF_C BFu15i_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_Ip, BFu15i_BFu16ll_Ip)
//============================================================================


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



static void Test_BFu15i_BFu16ll_L()
{
  {
    init_simple_test("BFu15i_BFu16ll_L");
    static STRUCT_IF_C BFu15i_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_L");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_L");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_L, BFu15i_BFu16ll_L)
//============================================================================


struct  BFu15i_BFu16ll_S  {
  unsigned int v1:15;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu15i_BFu16ll_S) C1{ Fi:15 FL:16 Fs}



static void Test_BFu15i_BFu16ll_S()
{
  {
    init_simple_test("BFu15i_BFu16ll_S");
    static STRUCT_IF_C BFu15i_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_S");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_S");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_S, BFu15i_BFu16ll_S)
//============================================================================


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



static void Test_BFu15i_BFu16ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu16ll_Uc");
    static STRUCT_IF_C BFu15i_BFu16ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_Uc, BFu15i_BFu16ll_Uc)
//============================================================================


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



static void Test_BFu15i_BFu16ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu16ll_Ui");
    static STRUCT_IF_C BFu15i_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_Ui, BFu15i_BFu16ll_Ui)
//============================================================================


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



static void Test_BFu15i_BFu16ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu16ll_Ul");
    static STRUCT_IF_C BFu15i_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_Ul, BFu15i_BFu16ll_Ul)
//============================================================================


struct  BFu15i_BFu16ll_Us  {
  unsigned int v1:15;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu16ll_Us) C1{ Fi:15 FL:16 Fs}



static void Test_BFu15i_BFu16ll_Us()
{
  {
    init_simple_test("BFu15i_BFu16ll_Us");
    static STRUCT_IF_C BFu15i_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_Us, BFu15i_BFu16ll_Us)
//============================================================================


struct  BFu15i_BFu16ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu15i_BFu16ll_Vp) C1{ Fi:15 FL:16 Fp}



static void Test_BFu15i_BFu16ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu16ll_Vp");
    static STRUCT_IF_C BFu15i_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 16, 1, "BFu15i_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16ll_Vp, BFu15i_BFu16ll_Vp)
//============================================================================


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



static void Test_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s, BFu15i_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu15i, BFu15i_BFu16s_BFu15i)
//============================================================================


struct  BFu15i_BFu16s_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFu16s_BFu15ll) C1{ Fi:15 Fs:16 FL:15}



static void Test_BFu15i_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu15ll, BFu15i_BFu16s_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu16s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu15s, BFu15i_BFu16s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu16i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu16i, BFu15i_BFu16s_BFu16i)
//============================================================================


struct  BFu15i_BFu16s_BFu16ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu16s_BFu16ll) C1{ Fi:15 Fs:16 FL:16}



static void Test_BFu15i_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu16ll, BFu15i_BFu16s_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu16s");
    static STRUCT_IF_C BFu15i_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu16s, BFu15i_BFu16s_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu17i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu17i, BFu15i_BFu16s_BFu17i)
//============================================================================


struct  BFu15i_BFu16s_BFu17ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu16s_BFu17ll) C1{ Fi:15 Fs:16 FL:17}



static void Test_BFu15i_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu17ll, BFu15i_BFu16s_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu1c");
    static STRUCT_IF_C BFu15i_BFu16s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu1c, BFu15i_BFu16s_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu1i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu1i, BFu15i_BFu16s_BFu1i)
//============================================================================


struct  BFu15i_BFu16s_BFu1ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_BFu16s_BFu1ll) C1{ Fi:15 Fs:16 FL:1}



static void Test_BFu15i_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu1ll, BFu15i_BFu16s_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu1s");
    static STRUCT_IF_C BFu15i_BFu16s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu1s, BFu15i_BFu16s_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu31i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu31i, BFu15i_BFu16s_BFu31i)
//============================================================================


struct  BFu15i_BFu16s_BFu31ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu16s_BFu31ll) C1{ Fi:15 Fs:16 FL:31}



static void Test_BFu15i_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu31ll, BFu15i_BFu16s_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu32i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu32i, BFu15i_BFu16s_BFu32i)
//============================================================================


struct  BFu15i_BFu16s_BFu32ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu16s_BFu32ll) C1{ Fi:15 Fs:16 FL:32}



static void Test_BFu15i_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu32ll, BFu15i_BFu16s_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu33()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu33");
    static STRUCT_IF_C BFu15i_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu15i_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu15i_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu33, BFu15i_BFu16s_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu7c");
    static STRUCT_IF_C BFu15i_BFu16s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu7c, BFu15i_BFu16s_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu7i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu7i, BFu15i_BFu16s_BFu7i)
//============================================================================


struct  BFu15i_BFu16s_BFu7ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu16s_BFu7ll) C1{ Fi:15 Fs:16 FL:7}



static void Test_BFu15i_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu7ll, BFu15i_BFu16s_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu7s");
    static STRUCT_IF_C BFu15i_BFu16s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu7s, BFu15i_BFu16s_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu8c");
    static STRUCT_IF_C BFu15i_BFu16s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu8c, BFu15i_BFu16s_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu8i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu8i, BFu15i_BFu16s_BFu8i)
//============================================================================


struct  BFu15i_BFu16s_BFu8ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu16s_BFu8ll) C1{ Fi:15 Fs:16 FL:8}



static void Test_BFu15i_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu8ll, BFu15i_BFu16s_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu8s");
    static STRUCT_IF_C BFu15i_BFu16s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu8s, BFu15i_BFu16s_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu9i");
    static STRUCT_IF_C BFu15i_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu9i, BFu15i_BFu16s_BFu9i)
//============================================================================


struct  BFu15i_BFu16s_BFu9ll  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu16s_BFu9ll) C1{ Fi:15 Fs:16 FL:9}



static void Test_BFu15i_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu9ll, BFu15i_BFu16s_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu16s_BFu9s");
    static STRUCT_IF_C BFu15i_BFu16s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_BFu9s, BFu15i_BFu16s_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu16s_C()
{
  {
    init_simple_test("BFu15i_BFu16s_C");
    static STRUCT_IF_C BFu15i_BFu16s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_C, BFu15i_BFu16s_C)
//============================================================================


struct  BFu15i_BFu16s_D  {
  unsigned int v1:15;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu15i_BFu16s_D) C1{ Fi:15 Fs:16 FL}



static void Test_BFu15i_BFu16s_D()
{
  {
    init_simple_test("BFu15i_BFu16s_D");
    static STRUCT_IF_C BFu15i_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_D, BFu15i_BFu16s_D)
//============================================================================


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



static void Test_BFu15i_BFu16s_F()
{
  {
    init_simple_test("BFu15i_BFu16s_F");
    static STRUCT_IF_C BFu15i_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_F, BFu15i_BFu16s_F)
//============================================================================


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



static void Test_BFu15i_BFu16s_I()
{
  {
    init_simple_test("BFu15i_BFu16s_I");
    static STRUCT_IF_C BFu15i_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_I, BFu15i_BFu16s_I)
//============================================================================


struct  BFu15i_BFu16s_Ip  {
  unsigned int v1:15;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu15i_BFu16s_Ip) C1{ Fi:15 Fs:16 Fp}



static void Test_BFu15i_BFu16s_Ip()
{
  {
    init_simple_test("BFu15i_BFu16s_Ip");
    static STRUCT_IF_C BFu15i_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_Ip, BFu15i_BFu16s_Ip)
//============================================================================


struct  BFu15i_BFu16s_L  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu16s_L) C1{ Fi:15 Fs:16 FL}



static void Test_BFu15i_BFu16s_L()
{
  {
    init_simple_test("BFu15i_BFu16s_L");
    static STRUCT_IF_C BFu15i_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_L, BFu15i_BFu16s_L)
//============================================================================


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



static void Test_BFu15i_BFu16s_S()
{
  {
    init_simple_test("BFu15i_BFu16s_S");
    static STRUCT_IF_C BFu15i_BFu16s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_S, BFu15i_BFu16s_S)
//============================================================================


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



static void Test_BFu15i_BFu16s_Uc()
{
  {
    init_simple_test("BFu15i_BFu16s_Uc");
    static STRUCT_IF_C BFu15i_BFu16s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_Uc, BFu15i_BFu16s_Uc)
//============================================================================


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



static void Test_BFu15i_BFu16s_Ui()
{
  {
    init_simple_test("BFu15i_BFu16s_Ui");
    static STRUCT_IF_C BFu15i_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_Ui, BFu15i_BFu16s_Ui)
//============================================================================


struct  BFu15i_BFu16s_Ul  {
  unsigned int v1:15;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu15i_BFu16s_Ul) C1{ Fi:15 Fs:16 FL}



static void Test_BFu15i_BFu16s_Ul()
{
  {
    init_simple_test("BFu15i_BFu16s_Ul");
    static STRUCT_IF_C BFu15i_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_Ul, BFu15i_BFu16s_Ul)
//============================================================================


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



static void Test_BFu15i_BFu16s_Us()
{
  {
    init_simple_test("BFu15i_BFu16s_Us");
    static STRUCT_IF_C BFu15i_BFu16s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu16s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_Us, BFu15i_BFu16s_Us)
//============================================================================


struct  BFu15i_BFu16s_Vp  {
  unsigned int v1:15;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu15i_BFu16s_Vp) C1{ Fi:15 Fs:16 Fp}



static void Test_BFu15i_BFu16s_Vp()
{
  {
    init_simple_test("BFu15i_BFu16s_Vp");
    static STRUCT_IF_C BFu15i_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu15i_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu16s_Vp, BFu15i_BFu16s_Vp)
//============================================================================


struct  BFu15i_BFu17i  {
  unsigned int v1:15;
  unsigned int v2:17;
};
//SIG(1 BFu15i_BFu17i) C1{ Fi:15 Fi:17}



static void Test_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i, BFu15i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu15i, BFu15i_BFu17i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu15ll, BFu15i_BFu17i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu15s, BFu15i_BFu17i_BFu15s)
//============================================================================


struct  BFu15i_BFu17i_BFu16i  {
  unsigned int v1:15;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu17i_BFu16i) C1{ Fi:15 Fi:17 Fi:16}



static void Test_BFu15i_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu16i, BFu15i_BFu17i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu16ll, BFu15i_BFu17i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu16s, BFu15i_BFu17i_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu17i, BFu15i_BFu17i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu17ll, BFu15i_BFu17i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu17i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu1c, BFu15i_BFu17i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu1i, BFu15i_BFu17i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu1ll, BFu15i_BFu17i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu17i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu1s, BFu15i_BFu17i_BFu1s)
//============================================================================


struct  BFu15i_BFu17i_BFu31i  {
  unsigned int v1:15;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu17i_BFu31i) C1{ Fi:15 Fi:17 Fi:31}



static void Test_BFu15i_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu31i, BFu15i_BFu17i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu31ll, BFu15i_BFu17i_BFu31ll)
//============================================================================


struct  BFu15i_BFu17i_BFu32i  {
  unsigned int v1:15;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu17i_BFu32i) C1{ Fi:15 Fi:17 Fi:32}



static void Test_BFu15i_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu32i, BFu15i_BFu17i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu32ll, BFu15i_BFu17i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu33");
    static STRUCT_IF_C BFu15i_BFu17i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu15i_BFu17i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu15i_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu33, BFu15i_BFu17i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu17i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu7c, BFu15i_BFu17i_BFu7c)
//============================================================================


struct  BFu15i_BFu17i_BFu7i  {
  unsigned int v1:15;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu17i_BFu7i) C1{ Fi:15 Fi:17 Fi:7}



static void Test_BFu15i_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu7i, BFu15i_BFu17i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu7ll, BFu15i_BFu17i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu17i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu7s, BFu15i_BFu17i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu17i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu8c, BFu15i_BFu17i_BFu8c)
//============================================================================


struct  BFu15i_BFu17i_BFu8i  {
  unsigned int v1:15;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu17i_BFu8i) C1{ Fi:15 Fi:17 Fi:8}



static void Test_BFu15i_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu8i, BFu15i_BFu17i_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu8ll, BFu15i_BFu17i_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu17i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu8s, BFu15i_BFu17i_BFu8s)
//============================================================================


struct  BFu15i_BFu17i_BFu9i  {
  unsigned int v1:15;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu17i_BFu9i) C1{ Fi:15 Fi:17 Fi:9}



static void Test_BFu15i_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu9i, BFu15i_BFu17i_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu9ll, BFu15i_BFu17i_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu17i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_BFu9s, BFu15i_BFu17i_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu17i_C()
{
  {
    init_simple_test("BFu15i_BFu17i_C");
    static STRUCT_IF_C BFu15i_BFu17i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_C");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_C");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_C, BFu15i_BFu17i_C)
//============================================================================


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



static void Test_BFu15i_BFu17i_D()
{
  {
    init_simple_test("BFu15i_BFu17i_D");
    static STRUCT_IF_C BFu15i_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_D");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_D");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_D, BFu15i_BFu17i_D)
//============================================================================


struct  BFu15i_BFu17i_F  {
  unsigned int v1:15;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu15i_BFu17i_F) C1{ Fi:15 Fi:17 Fi}



static void Test_BFu15i_BFu17i_F()
{
  {
    init_simple_test("BFu15i_BFu17i_F");
    static STRUCT_IF_C BFu15i_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_F");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_F");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_F, BFu15i_BFu17i_F)
//============================================================================


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



static void Test_BFu15i_BFu17i_I()
{
  {
    init_simple_test("BFu15i_BFu17i_I");
    static STRUCT_IF_C BFu15i_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_I");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_I");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_I, BFu15i_BFu17i_I)
//============================================================================


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



static void Test_BFu15i_BFu17i_Ip()
{
  {
    init_simple_test("BFu15i_BFu17i_Ip");
    static STRUCT_IF_C BFu15i_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_Ip, BFu15i_BFu17i_Ip)
//============================================================================


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



static void Test_BFu15i_BFu17i_L()
{
  {
    init_simple_test("BFu15i_BFu17i_L");
    static STRUCT_IF_C BFu15i_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_L");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_L");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_L, BFu15i_BFu17i_L)
//============================================================================


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



static void Test_BFu15i_BFu17i_S()
{
  {
    init_simple_test("BFu15i_BFu17i_S");
    static STRUCT_IF_C BFu15i_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_S");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_S");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_S, BFu15i_BFu17i_S)
//============================================================================


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



static void Test_BFu15i_BFu17i_Uc()
{
  {
    init_simple_test("BFu15i_BFu17i_Uc");
    static STRUCT_IF_C BFu15i_BFu17i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_Uc, BFu15i_BFu17i_Uc)
//============================================================================


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



static void Test_BFu15i_BFu17i_Ui()
{
  {
    init_simple_test("BFu15i_BFu17i_Ui");
    static STRUCT_IF_C BFu15i_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_Ui, BFu15i_BFu17i_Ui)
//============================================================================


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



static void Test_BFu15i_BFu17i_Ul()
{
  {
    init_simple_test("BFu15i_BFu17i_Ul");
    static STRUCT_IF_C BFu15i_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_Ul, BFu15i_BFu17i_Ul)
//============================================================================


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



static void Test_BFu15i_BFu17i_Us()
{
  {
    init_simple_test("BFu15i_BFu17i_Us");
    static STRUCT_IF_C BFu15i_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_Us");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_Us");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_Us, BFu15i_BFu17i_Us)
//============================================================================


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



static void Test_BFu15i_BFu17i_Vp()
{
  {
    init_simple_test("BFu15i_BFu17i_Vp");
    static STRUCT_IF_C BFu15i_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17i_Vp, BFu15i_BFu17i_Vp)
//============================================================================


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



static void Test_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll, BFu15i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu15i, BFu15i_BFu17ll_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu15ll, BFu15i_BFu17ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu17ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu17ll_BFu15s) C1{ Fi:15 FL:17 Fs:15}



static void Test_BFu15i_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu15s, BFu15i_BFu17ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu16i, BFu15i_BFu17ll_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu16ll, BFu15i_BFu17ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu17ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu17ll_BFu16s) C1{ Fi:15 FL:17 Fs:16}



static void Test_BFu15i_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu16s, BFu15i_BFu17ll_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu17i, BFu15i_BFu17ll_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu17ll, BFu15i_BFu17ll_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu1c, BFu15i_BFu17ll_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu1i, BFu15i_BFu17ll_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu1ll, BFu15i_BFu17ll_BFu1ll)
//============================================================================


struct  BFu15i_BFu17ll_BFu1s  {
  unsigned int v1:15;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu17ll_BFu1s) C1{ Fi:15 FL:17 Fs:1}



static void Test_BFu15i_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu1s, BFu15i_BFu17ll_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu31i, BFu15i_BFu17ll_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu31ll, BFu15i_BFu17ll_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu32i, BFu15i_BFu17ll_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu32ll, BFu15i_BFu17ll_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu15i_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu15i_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu33, BFu15i_BFu17ll_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu7c, BFu15i_BFu17ll_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu7i, BFu15i_BFu17ll_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu7ll, BFu15i_BFu17ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu17ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu17ll_BFu7s) C1{ Fi:15 FL:17 Fs:7}



static void Test_BFu15i_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu7s, BFu15i_BFu17ll_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu8c, BFu15i_BFu17ll_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu8i, BFu15i_BFu17ll_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu8ll, BFu15i_BFu17ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu17ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu17ll_BFu8s) C1{ Fi:15 FL:17 Fs:8}



static void Test_BFu15i_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu8s, BFu15i_BFu17ll_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu9i, BFu15i_BFu17ll_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu9ll, BFu15i_BFu17ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu17ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu17ll_BFu9s) C1{ Fi:15 FL:17 Fs:9}



static void Test_BFu15i_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_BFu9s, BFu15i_BFu17ll_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu17ll_C()
{
  {
    init_simple_test("BFu15i_BFu17ll_C");
    static STRUCT_IF_C BFu15i_BFu17ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_C");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_C");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_C, BFu15i_BFu17ll_C)
//============================================================================


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



static void Test_BFu15i_BFu17ll_D()
{
  {
    init_simple_test("BFu15i_BFu17ll_D");
    static STRUCT_IF_C BFu15i_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_D");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_D");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_D, BFu15i_BFu17ll_D)
//============================================================================


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



static void Test_BFu15i_BFu17ll_F()
{
  {
    init_simple_test("BFu15i_BFu17ll_F");
    static STRUCT_IF_C BFu15i_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_F");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_F");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_F, BFu15i_BFu17ll_F)
//============================================================================


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



static void Test_BFu15i_BFu17ll_I()
{
  {
    init_simple_test("BFu15i_BFu17ll_I");
    static STRUCT_IF_C BFu15i_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_I");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_I");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_I, BFu15i_BFu17ll_I)
//============================================================================


struct  BFu15i_BFu17ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu15i_BFu17ll_Ip) C1{ Fi:15 FL:17 Fp}



static void Test_BFu15i_BFu17ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu17ll_Ip");
    static STRUCT_IF_C BFu15i_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_Ip, BFu15i_BFu17ll_Ip)
//============================================================================


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



static void Test_BFu15i_BFu17ll_L()
{
  {
    init_simple_test("BFu15i_BFu17ll_L");
    static STRUCT_IF_C BFu15i_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_L");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_L");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_L, BFu15i_BFu17ll_L)
//============================================================================


struct  BFu15i_BFu17ll_S  {
  unsigned int v1:15;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu15i_BFu17ll_S) C1{ Fi:15 FL:17 Fs}



static void Test_BFu15i_BFu17ll_S()
{
  {
    init_simple_test("BFu15i_BFu17ll_S");
    static STRUCT_IF_C BFu15i_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_S");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_S");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_S, BFu15i_BFu17ll_S)
//============================================================================


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



static void Test_BFu15i_BFu17ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu17ll_Uc");
    static STRUCT_IF_C BFu15i_BFu17ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_Uc, BFu15i_BFu17ll_Uc)
//============================================================================


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



static void Test_BFu15i_BFu17ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu17ll_Ui");
    static STRUCT_IF_C BFu15i_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_Ui, BFu15i_BFu17ll_Ui)
//============================================================================


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



static void Test_BFu15i_BFu17ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu17ll_Ul");
    static STRUCT_IF_C BFu15i_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_Ul, BFu15i_BFu17ll_Ul)
//============================================================================


struct  BFu15i_BFu17ll_Us  {
  unsigned int v1:15;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu17ll_Us) C1{ Fi:15 FL:17 Fs}



static void Test_BFu15i_BFu17ll_Us()
{
  {
    init_simple_test("BFu15i_BFu17ll_Us");
    static STRUCT_IF_C BFu15i_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_Us, BFu15i_BFu17ll_Us)
//============================================================================


struct  BFu15i_BFu17ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu15i_BFu17ll_Vp) C1{ Fi:15 FL:17 Fp}



static void Test_BFu15i_BFu17ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu17ll_Vp");
    static STRUCT_IF_C BFu15i_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 17, 1, "BFu15i_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu17ll_Vp, BFu15i_BFu17ll_Vp)
//============================================================================


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



static void Test_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c, BFu15i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu15i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu15i, BFu15i_BFu1c_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu15ll, BFu15i_BFu1c_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu15s");
    static STRUCT_IF_C BFu15i_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu15s, BFu15i_BFu1c_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu16i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu16i, BFu15i_BFu1c_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu16ll, BFu15i_BFu1c_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu16s");
    static STRUCT_IF_C BFu15i_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu16s, BFu15i_BFu1c_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu17i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu17i, BFu15i_BFu1c_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu15i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu17ll, BFu15i_BFu1c_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu1c");
    static STRUCT_IF_C BFu15i_BFu1c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu1c, BFu15i_BFu1c_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu1i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu1i, BFu15i_BFu1c_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu1ll, BFu15i_BFu1c_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu1s");
    static STRUCT_IF_C BFu15i_BFu1c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu1s, BFu15i_BFu1c_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu31i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu31i, BFu15i_BFu1c_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu15i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu31ll, BFu15i_BFu1c_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu32i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu32i, BFu15i_BFu1c_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu15i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu32ll, BFu15i_BFu1c_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu33()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu33");
    static STRUCT_IF_C BFu15i_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu15i_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu33, BFu15i_BFu1c_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu7c");
    static STRUCT_IF_C BFu15i_BFu1c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu7c, BFu15i_BFu1c_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu7i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu7i, BFu15i_BFu1c_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu7ll, BFu15i_BFu1c_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu7s");
    static STRUCT_IF_C BFu15i_BFu1c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu7s, BFu15i_BFu1c_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu8c");
    static STRUCT_IF_C BFu15i_BFu1c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu8c, BFu15i_BFu1c_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu8i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu8i, BFu15i_BFu1c_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu8ll, BFu15i_BFu1c_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu8s");
    static STRUCT_IF_C BFu15i_BFu1c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu8s, BFu15i_BFu1c_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu9i");
    static STRUCT_IF_C BFu15i_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu9i, BFu15i_BFu1c_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu9ll, BFu15i_BFu1c_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu1c_BFu9s");
    static STRUCT_IF_C BFu15i_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_BFu9s, BFu15i_BFu1c_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu1c_C()
{
  {
    init_simple_test("BFu15i_BFu1c_C");
    static STRUCT_IF_C BFu15i_BFu1c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_C");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_C");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_C, BFu15i_BFu1c_C)
//============================================================================


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



static void Test_BFu15i_BFu1c_D()
{
  {
    init_simple_test("BFu15i_BFu1c_D");
    static STRUCT_IF_C BFu15i_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_D");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_D, BFu15i_BFu1c_D)
//============================================================================


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



static void Test_BFu15i_BFu1c_F()
{
  {
    init_simple_test("BFu15i_BFu1c_F");
    static STRUCT_IF_C BFu15i_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_F");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_F, BFu15i_BFu1c_F)
//============================================================================


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



static void Test_BFu15i_BFu1c_I()
{
  {
    init_simple_test("BFu15i_BFu1c_I");
    static STRUCT_IF_C BFu15i_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_I");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_I, BFu15i_BFu1c_I)
//============================================================================


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



static void Test_BFu15i_BFu1c_Ip()
{
  {
    init_simple_test("BFu15i_BFu1c_Ip");
    static STRUCT_IF_C BFu15i_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_Ip");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_Ip, BFu15i_BFu1c_Ip)
//============================================================================


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



static void Test_BFu15i_BFu1c_L()
{
  {
    init_simple_test("BFu15i_BFu1c_L");
    static STRUCT_IF_C BFu15i_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_L");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_L, BFu15i_BFu1c_L)
//============================================================================


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



static void Test_BFu15i_BFu1c_S()
{
  {
    init_simple_test("BFu15i_BFu1c_S");
    static STRUCT_IF_C BFu15i_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_S");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_S");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_S, BFu15i_BFu1c_S)
//============================================================================


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



static void Test_BFu15i_BFu1c_Uc()
{
  {
    init_simple_test("BFu15i_BFu1c_Uc");
    static STRUCT_IF_C BFu15i_BFu1c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_Uc");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_Uc");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_Uc, BFu15i_BFu1c_Uc)
//============================================================================


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



static void Test_BFu15i_BFu1c_Ui()
{
  {
    init_simple_test("BFu15i_BFu1c_Ui");
    static STRUCT_IF_C BFu15i_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_Ui");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_Ui, BFu15i_BFu1c_Ui)
//============================================================================


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



static void Test_BFu15i_BFu1c_Ul()
{
  {
    init_simple_test("BFu15i_BFu1c_Ul");
    static STRUCT_IF_C BFu15i_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_Ul");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_Ul, BFu15i_BFu1c_Ul)
//============================================================================


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



static void Test_BFu15i_BFu1c_Us()
{
  {
    init_simple_test("BFu15i_BFu1c_Us");
    static STRUCT_IF_C BFu15i_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_Us");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_Us");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_Us, BFu15i_BFu1c_Us)
//============================================================================


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



static void Test_BFu15i_BFu1c_Vp()
{
  {
    init_simple_test("BFu15i_BFu1c_Vp");
    static STRUCT_IF_C BFu15i_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1c_Vp");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1c_Vp, BFu15i_BFu1c_Vp)
//============================================================================


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



static void Test_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i, BFu15i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu15i, BFu15i_BFu1i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu15ll, BFu15i_BFu1i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu15s, BFu15i_BFu1i_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu16i, BFu15i_BFu1i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu16ll, BFu15i_BFu1i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu16s, BFu15i_BFu1i_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu17i, BFu15i_BFu1i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu15i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu17ll, BFu15i_BFu1i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu1c, BFu15i_BFu1i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu1i, BFu15i_BFu1i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu1ll, BFu15i_BFu1i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu1s, BFu15i_BFu1i_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu31i, BFu15i_BFu1i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu15i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu31ll, BFu15i_BFu1i_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu32i, BFu15i_BFu1i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu15i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu32ll, BFu15i_BFu1i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu33");
    static STRUCT_IF_C BFu15i_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu15i_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu33, BFu15i_BFu1i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu7c, BFu15i_BFu1i_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu7i, BFu15i_BFu1i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu7ll, BFu15i_BFu1i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu7s, BFu15i_BFu1i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu8c, BFu15i_BFu1i_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu8i, BFu15i_BFu1i_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu8ll, BFu15i_BFu1i_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu8s, BFu15i_BFu1i_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu9i, BFu15i_BFu1i_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu9ll, BFu15i_BFu1i_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu1i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_BFu9s, BFu15i_BFu1i_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu1i_C()
{
  {
    init_simple_test("BFu15i_BFu1i_C");
    static STRUCT_IF_C BFu15i_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_C");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_C");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_C, BFu15i_BFu1i_C)
//============================================================================


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



static void Test_BFu15i_BFu1i_D()
{
  {
    init_simple_test("BFu15i_BFu1i_D");
    static STRUCT_IF_C BFu15i_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_D");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_D, BFu15i_BFu1i_D)
//============================================================================


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



static void Test_BFu15i_BFu1i_F()
{
  {
    init_simple_test("BFu15i_BFu1i_F");
    static STRUCT_IF_C BFu15i_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_F");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_F, BFu15i_BFu1i_F)
//============================================================================


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



static void Test_BFu15i_BFu1i_I()
{
  {
    init_simple_test("BFu15i_BFu1i_I");
    static STRUCT_IF_C BFu15i_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_I");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_I, BFu15i_BFu1i_I)
//============================================================================


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



static void Test_BFu15i_BFu1i_Ip()
{
  {
    init_simple_test("BFu15i_BFu1i_Ip");
    static STRUCT_IF_C BFu15i_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_Ip, BFu15i_BFu1i_Ip)
//============================================================================


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



static void Test_BFu15i_BFu1i_L()
{
  {
    init_simple_test("BFu15i_BFu1i_L");
    static STRUCT_IF_C BFu15i_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_L");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_L, BFu15i_BFu1i_L)
//============================================================================


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



static void Test_BFu15i_BFu1i_S()
{
  {
    init_simple_test("BFu15i_BFu1i_S");
    static STRUCT_IF_C BFu15i_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_S");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_S");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_S, BFu15i_BFu1i_S)
//============================================================================


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



static void Test_BFu15i_BFu1i_Uc()
{
  {
    init_simple_test("BFu15i_BFu1i_Uc");
    static STRUCT_IF_C BFu15i_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_Uc");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_Uc, BFu15i_BFu1i_Uc)
//============================================================================


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



static void Test_BFu15i_BFu1i_Ui()
{
  {
    init_simple_test("BFu15i_BFu1i_Ui");
    static STRUCT_IF_C BFu15i_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_Ui, BFu15i_BFu1i_Ui)
//============================================================================


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



static void Test_BFu15i_BFu1i_Ul()
{
  {
    init_simple_test("BFu15i_BFu1i_Ul");
    static STRUCT_IF_C BFu15i_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_Ul, BFu15i_BFu1i_Ul)
//============================================================================


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



static void Test_BFu15i_BFu1i_Us()
{
  {
    init_simple_test("BFu15i_BFu1i_Us");
    static STRUCT_IF_C BFu15i_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_Us");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_Us");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_Us, BFu15i_BFu1i_Us)
//============================================================================


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



static void Test_BFu15i_BFu1i_Vp()
{
  {
    init_simple_test("BFu15i_BFu1i_Vp");
    static STRUCT_IF_C BFu15i_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1i_Vp, BFu15i_BFu1i_Vp)
//============================================================================


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



static void Test_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll, BFu15i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu15i, BFu15i_BFu1ll_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu15ll, BFu15i_BFu1ll_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu15s, BFu15i_BFu1ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu16i, BFu15i_BFu1ll_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu16ll, BFu15i_BFu1ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu1ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu1ll_BFu16s) C1{ Fi:15 FL:1 Fs:16}



static void Test_BFu15i_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu16s, BFu15i_BFu1ll_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu17i, BFu15i_BFu1ll_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu15i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu17ll, BFu15i_BFu1ll_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu1c, BFu15i_BFu1ll_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu1i, BFu15i_BFu1ll_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu1ll, BFu15i_BFu1ll_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu1s, BFu15i_BFu1ll_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu31i, BFu15i_BFu1ll_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu15i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu31ll, BFu15i_BFu1ll_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu32i, BFu15i_BFu1ll_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu15i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu32ll, BFu15i_BFu1ll_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu15i_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu33, BFu15i_BFu1ll_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu7c, BFu15i_BFu1ll_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu7i, BFu15i_BFu1ll_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu7ll, BFu15i_BFu1ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu1ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu1ll_BFu7s) C1{ Fi:15 FL:1 Fs:7}



static void Test_BFu15i_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu7s, BFu15i_BFu1ll_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu8c, BFu15i_BFu1ll_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu8i, BFu15i_BFu1ll_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu8ll, BFu15i_BFu1ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu1ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu1ll_BFu8s) C1{ Fi:15 FL:1 Fs:8}



static void Test_BFu15i_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu8s, BFu15i_BFu1ll_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu9i, BFu15i_BFu1ll_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu9ll, BFu15i_BFu1ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu1ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu1ll_BFu9s) C1{ Fi:15 FL:1 Fs:9}



static void Test_BFu15i_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_BFu9s, BFu15i_BFu1ll_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu1ll_C()
{
  {
    init_simple_test("BFu15i_BFu1ll_C");
    static STRUCT_IF_C BFu15i_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_C");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_C");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_C, BFu15i_BFu1ll_C)
//============================================================================


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



static void Test_BFu15i_BFu1ll_D()
{
  {
    init_simple_test("BFu15i_BFu1ll_D");
    static STRUCT_IF_C BFu15i_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_D");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_D, BFu15i_BFu1ll_D)
//============================================================================


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



static void Test_BFu15i_BFu1ll_F()
{
  {
    init_simple_test("BFu15i_BFu1ll_F");
    static STRUCT_IF_C BFu15i_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_F");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_F, BFu15i_BFu1ll_F)
//============================================================================


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



static void Test_BFu15i_BFu1ll_I()
{
  {
    init_simple_test("BFu15i_BFu1ll_I");
    static STRUCT_IF_C BFu15i_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_I");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_I, BFu15i_BFu1ll_I)
//============================================================================


struct  BFu15i_BFu1ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu15i_BFu1ll_Ip) C1{ Fi:15 FL:1 Fp}



static void Test_BFu15i_BFu1ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu1ll_Ip");
    static STRUCT_IF_C BFu15i_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_Ip, BFu15i_BFu1ll_Ip)
//============================================================================


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



static void Test_BFu15i_BFu1ll_L()
{
  {
    init_simple_test("BFu15i_BFu1ll_L");
    static STRUCT_IF_C BFu15i_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_L");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_L, BFu15i_BFu1ll_L)
//============================================================================


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



static void Test_BFu15i_BFu1ll_S()
{
  {
    init_simple_test("BFu15i_BFu1ll_S");
    static STRUCT_IF_C BFu15i_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_S");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_S");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_S, BFu15i_BFu1ll_S)
//============================================================================


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



static void Test_BFu15i_BFu1ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu1ll_Uc");
    static STRUCT_IF_C BFu15i_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_Uc");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_Uc, BFu15i_BFu1ll_Uc)
//============================================================================


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



static void Test_BFu15i_BFu1ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu1ll_Ui");
    static STRUCT_IF_C BFu15i_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_Ui, BFu15i_BFu1ll_Ui)
//============================================================================


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



static void Test_BFu15i_BFu1ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu1ll_Ul");
    static STRUCT_IF_C BFu15i_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_Ul, BFu15i_BFu1ll_Ul)
//============================================================================


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



static void Test_BFu15i_BFu1ll_Us()
{
  {
    init_simple_test("BFu15i_BFu1ll_Us");
    static STRUCT_IF_C BFu15i_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_Us, BFu15i_BFu1ll_Us)
//============================================================================


struct  BFu15i_BFu1ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu15i_BFu1ll_Vp) C1{ Fi:15 FL:1 Fp}



static void Test_BFu15i_BFu1ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu1ll_Vp");
    static STRUCT_IF_C BFu15i_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1ll_Vp, BFu15i_BFu1ll_Vp)
//============================================================================


struct  BFu15i_BFu1s  {
  unsigned int v1:15;
  unsigned short v2:1;
};
//SIG(1 BFu15i_BFu1s) C1{ Fi:15 Fs:1}



static void Test_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s, BFu15i_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu15i, BFu15i_BFu1s_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu15ll, BFu15i_BFu1s_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu15i_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu15s, BFu15i_BFu1s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu16i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu16i, BFu15i_BFu1s_BFu16i)
//============================================================================


struct  BFu15i_BFu1s_BFu16ll  {
  unsigned int v1:15;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu1s_BFu16ll) C1{ Fi:15 Fs:1 FL:16}



static void Test_BFu15i_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu16ll, BFu15i_BFu1s_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu16s");
    static STRUCT_IF_C BFu15i_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu15i_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu16s, BFu15i_BFu1s_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu17i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu17i, BFu15i_BFu1s_BFu17i)
//============================================================================


struct  BFu15i_BFu1s_BFu17ll  {
  unsigned int v1:15;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu1s_BFu17ll) C1{ Fi:15 Fs:1 FL:17}



static void Test_BFu15i_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu15i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu17ll, BFu15i_BFu1s_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu1c");
    static STRUCT_IF_C BFu15i_BFu1s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu1c, BFu15i_BFu1s_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu1i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu1i, BFu15i_BFu1s_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu1ll, BFu15i_BFu1s_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu1s");
    static STRUCT_IF_C BFu15i_BFu1s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu15i_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu1s, BFu15i_BFu1s_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu31i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu31i, BFu15i_BFu1s_BFu31i)
//============================================================================


struct  BFu15i_BFu1s_BFu31ll  {
  unsigned int v1:15;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu1s_BFu31ll) C1{ Fi:15 Fs:1 FL:31}



static void Test_BFu15i_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu15i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu31ll, BFu15i_BFu1s_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu32i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu32i, BFu15i_BFu1s_BFu32i)
//============================================================================


struct  BFu15i_BFu1s_BFu32ll  {
  unsigned int v1:15;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu1s_BFu32ll) C1{ Fi:15 Fs:1 FL:32}



static void Test_BFu15i_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu15i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu32ll, BFu15i_BFu1s_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu33()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu33");
    static STRUCT_IF_C BFu15i_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu15i_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu33, BFu15i_BFu1s_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu7c");
    static STRUCT_IF_C BFu15i_BFu1s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu7c, BFu15i_BFu1s_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu7i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu7i, BFu15i_BFu1s_BFu7i)
//============================================================================


struct  BFu15i_BFu1s_BFu7ll  {
  unsigned int v1:15;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu1s_BFu7ll) C1{ Fi:15 Fs:1 FL:7}



static void Test_BFu15i_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu7ll, BFu15i_BFu1s_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu7s");
    static STRUCT_IF_C BFu15i_BFu1s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu15i_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu7s, BFu15i_BFu1s_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu8c");
    static STRUCT_IF_C BFu15i_BFu1s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu8c, BFu15i_BFu1s_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu8i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu8i, BFu15i_BFu1s_BFu8i)
//============================================================================


struct  BFu15i_BFu1s_BFu8ll  {
  unsigned int v1:15;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu1s_BFu8ll) C1{ Fi:15 Fs:1 FL:8}



static void Test_BFu15i_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu8ll, BFu15i_BFu1s_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu8s");
    static STRUCT_IF_C BFu15i_BFu1s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu15i_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu8s, BFu15i_BFu1s_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu9i");
    static STRUCT_IF_C BFu15i_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu9i, BFu15i_BFu1s_BFu9i)
//============================================================================


struct  BFu15i_BFu1s_BFu9ll  {
  unsigned int v1:15;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu1s_BFu9ll) C1{ Fi:15 Fs:1 FL:9}



static void Test_BFu15i_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu9ll, BFu15i_BFu1s_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu1s_BFu9s");
    static STRUCT_IF_C BFu15i_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu15i_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_BFu9s, BFu15i_BFu1s_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu1s_C()
{
  {
    init_simple_test("BFu15i_BFu1s_C");
    static STRUCT_IF_C BFu15i_BFu1s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_C");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_C");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_C, BFu15i_BFu1s_C)
//============================================================================


struct  BFu15i_BFu1s_D  {
  unsigned int v1:15;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu15i_BFu1s_D) C1{ Fi:15 Fs:1 FL}



static void Test_BFu15i_BFu1s_D()
{
  {
    init_simple_test("BFu15i_BFu1s_D");
    static STRUCT_IF_C BFu15i_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_D");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_D, BFu15i_BFu1s_D)
//============================================================================


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



static void Test_BFu15i_BFu1s_F()
{
  {
    init_simple_test("BFu15i_BFu1s_F");
    static STRUCT_IF_C BFu15i_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_F");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_F, BFu15i_BFu1s_F)
//============================================================================


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



static void Test_BFu15i_BFu1s_I()
{
  {
    init_simple_test("BFu15i_BFu1s_I");
    static STRUCT_IF_C BFu15i_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_I");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_I, BFu15i_BFu1s_I)
//============================================================================


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



static void Test_BFu15i_BFu1s_Ip()
{
  {
    init_simple_test("BFu15i_BFu1s_Ip");
    static STRUCT_IF_C BFu15i_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_Ip");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_Ip, BFu15i_BFu1s_Ip)
//============================================================================


struct  BFu15i_BFu1s_L  {
  unsigned int v1:15;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu1s_L) C1{ Fi:15 Fs:1 FL}



static void Test_BFu15i_BFu1s_L()
{
  {
    init_simple_test("BFu15i_BFu1s_L");
    static STRUCT_IF_C BFu15i_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_L");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_L, BFu15i_BFu1s_L)
//============================================================================


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



static void Test_BFu15i_BFu1s_S()
{
  {
    init_simple_test("BFu15i_BFu1s_S");
    static STRUCT_IF_C BFu15i_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_S");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_S");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_S, BFu15i_BFu1s_S)
//============================================================================


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



static void Test_BFu15i_BFu1s_Uc()
{
  {
    init_simple_test("BFu15i_BFu1s_Uc");
    static STRUCT_IF_C BFu15i_BFu1s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_Uc");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_Uc");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_Uc, BFu15i_BFu1s_Uc)
//============================================================================


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



static void Test_BFu15i_BFu1s_Ui()
{
  {
    init_simple_test("BFu15i_BFu1s_Ui");
    static STRUCT_IF_C BFu15i_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_Ui");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_Ui, BFu15i_BFu1s_Ui)
//============================================================================


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



static void Test_BFu15i_BFu1s_Ul()
{
  {
    init_simple_test("BFu15i_BFu1s_Ul");
    static STRUCT_IF_C BFu15i_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_Ul");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_Ul, BFu15i_BFu1s_Ul)
//============================================================================


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



static void Test_BFu15i_BFu1s_Us()
{
  {
    init_simple_test("BFu15i_BFu1s_Us");
    static STRUCT_IF_C BFu15i_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu1s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_Us");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_Us");
    check_field_offset(lv, v3, 2, "BFu15i_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_Us, BFu15i_BFu1s_Us)
//============================================================================


struct  BFu15i_BFu1s_Vp  {
  unsigned int v1:15;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu15i_BFu1s_Vp) C1{ Fi:15 Fs:1 Fp}



static void Test_BFu15i_BFu1s_Vp()
{
  {
    init_simple_test("BFu15i_BFu1s_Vp");
    static STRUCT_IF_C BFu15i_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu1s_Vp");
    set_bf_and_test(lv, v2, 1, 7, 1, 1, "BFu15i_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu1s_Vp, BFu15i_BFu1s_Vp)
//============================================================================


struct  BFu15i_BFu31i  {
  unsigned int v1:15;
  unsigned int v2:31;
};
//SIG(1 BFu15i_BFu31i) C1{ Fi:15 Fi:31}



static void Test_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i, BFu15i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu15i, BFu15i_BFu31i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu15i_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu15ll, BFu15i_BFu31i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu15s, BFu15i_BFu31i_BFu15s)
//============================================================================


struct  BFu15i_BFu31i_BFu16i  {
  unsigned int v1:15;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu31i_BFu16i) C1{ Fi:15 Fi:31 Fi:16}



static void Test_BFu15i_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu16i, BFu15i_BFu31i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu15i_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu15i_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu16ll, BFu15i_BFu31i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu16s, BFu15i_BFu31i_BFu16s)
//============================================================================


struct  BFu15i_BFu31i_BFu17i  {
  unsigned int v1:15;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu31i_BFu17i) C1{ Fi:15 Fi:31 Fi:17}



static void Test_BFu15i_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu17i, BFu15i_BFu31i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu15i_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu15i_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu17ll, BFu15i_BFu31i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu15i_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu1c, BFu15i_BFu31i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu15i_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu1i, BFu15i_BFu31i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu15i_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu1ll, BFu15i_BFu31i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu15i_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu1s, BFu15i_BFu31i_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu31i, BFu15i_BFu31i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu15i_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu31ll, BFu15i_BFu31i_BFu31ll)
//============================================================================


struct  BFu15i_BFu31i_BFu32i  {
  unsigned int v1:15;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu31i_BFu32i) C1{ Fi:15 Fi:31 Fi:32}



static void Test_BFu15i_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu32i, BFu15i_BFu31i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu15i_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu15i_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu32ll, BFu15i_BFu31i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu33");
    static STRUCT_IF_C BFu15i_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu15i_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu15i_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu33, BFu15i_BFu31i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu7c, BFu15i_BFu31i_BFu7c)
//============================================================================


struct  BFu15i_BFu31i_BFu7i  {
  unsigned int v1:15;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu31i_BFu7i) C1{ Fi:15 Fi:31 Fi:7}



static void Test_BFu15i_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu7i, BFu15i_BFu31i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu15i_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu15i_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu7ll, BFu15i_BFu31i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu7s, BFu15i_BFu31i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu8c, BFu15i_BFu31i_BFu8c)
//============================================================================


struct  BFu15i_BFu31i_BFu8i  {
  unsigned int v1:15;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu31i_BFu8i) C1{ Fi:15 Fi:31 Fi:8}



static void Test_BFu15i_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu8i, BFu15i_BFu31i_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu15i_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu15i_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu8ll, BFu15i_BFu31i_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu8s, BFu15i_BFu31i_BFu8s)
//============================================================================


struct  BFu15i_BFu31i_BFu9i  {
  unsigned int v1:15;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu31i_BFu9i) C1{ Fi:15 Fi:31 Fi:9}



static void Test_BFu15i_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu9i, BFu15i_BFu31i_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu15i_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu15i_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu9ll, BFu15i_BFu31i_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu31i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_BFu9s, BFu15i_BFu31i_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu31i_C()
{
  {
    init_simple_test("BFu15i_BFu31i_C");
    static STRUCT_IF_C BFu15i_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_C, BFu15i_BFu31i_C)
//============================================================================


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



static void Test_BFu15i_BFu31i_D()
{
  {
    init_simple_test("BFu15i_BFu31i_D");
    static STRUCT_IF_C BFu15i_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_D, BFu15i_BFu31i_D)
//============================================================================


struct  BFu15i_BFu31i_F  {
  unsigned int v1:15;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu15i_BFu31i_F) C1{ Fi:15 Fi:31 Fi}



static void Test_BFu15i_BFu31i_F()
{
  {
    init_simple_test("BFu15i_BFu31i_F");
    static STRUCT_IF_C BFu15i_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_F, BFu15i_BFu31i_F)
//============================================================================


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



static void Test_BFu15i_BFu31i_I()
{
  {
    init_simple_test("BFu15i_BFu31i_I");
    static STRUCT_IF_C BFu15i_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_I, BFu15i_BFu31i_I)
//============================================================================


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



static void Test_BFu15i_BFu31i_Ip()
{
  {
    init_simple_test("BFu15i_BFu31i_Ip");
    static STRUCT_IF_C BFu15i_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_Ip, BFu15i_BFu31i_Ip)
//============================================================================


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



static void Test_BFu15i_BFu31i_L()
{
  {
    init_simple_test("BFu15i_BFu31i_L");
    static STRUCT_IF_C BFu15i_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_L, BFu15i_BFu31i_L)
//============================================================================


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



static void Test_BFu15i_BFu31i_S()
{
  {
    init_simple_test("BFu15i_BFu31i_S");
    static STRUCT_IF_C BFu15i_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_S, BFu15i_BFu31i_S)
//============================================================================


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



static void Test_BFu15i_BFu31i_Uc()
{
  {
    init_simple_test("BFu15i_BFu31i_Uc");
    static STRUCT_IF_C BFu15i_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_Uc, BFu15i_BFu31i_Uc)
//============================================================================


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



static void Test_BFu15i_BFu31i_Ui()
{
  {
    init_simple_test("BFu15i_BFu31i_Ui");
    static STRUCT_IF_C BFu15i_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_Ui, BFu15i_BFu31i_Ui)
//============================================================================


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



static void Test_BFu15i_BFu31i_Ul()
{
  {
    init_simple_test("BFu15i_BFu31i_Ul");
    static STRUCT_IF_C BFu15i_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_Ul, BFu15i_BFu31i_Ul)
//============================================================================


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



static void Test_BFu15i_BFu31i_Us()
{
  {
    init_simple_test("BFu15i_BFu31i_Us");
    static STRUCT_IF_C BFu15i_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_Us, BFu15i_BFu31i_Us)
//============================================================================


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



static void Test_BFu15i_BFu31i_Vp()
{
  {
    init_simple_test("BFu15i_BFu31i_Vp");
    static STRUCT_IF_C BFu15i_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu15i_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31i_Vp, BFu15i_BFu31i_Vp)
//============================================================================


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



static void Test_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll, BFu15i_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 6, 15, 1, "BFu15i_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu15i, BFu15i_BFu31ll_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 6, 15, 1, "BFu15i_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu15ll, BFu15i_BFu31ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu31ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu31ll_BFu15s) C1{ Fi:15 FL:31 Fs:15}



static void Test_BFu15i_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu15i_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu15s, BFu15i_BFu31ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 6, 16, 1, "BFu15i_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 6, 16, hide_ull(1LL<<15), "BFu15i_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu16i, BFu15i_BFu31ll_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 6, 16, 1, "BFu15i_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 6, 16, hide_ull(1LL<<15), "BFu15i_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu16ll, BFu15i_BFu31ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu31ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu31ll_BFu16s) C1{ Fi:15 FL:31 Fs:16}



static void Test_BFu15i_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu15i_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu16s, BFu15i_BFu31ll_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 6, 17, 1, "BFu15i_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 6, 17, hide_ull(1LL<<16), "BFu15i_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu17i, BFu15i_BFu31ll_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 6, 17, 1, "BFu15i_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 6, 17, hide_ull(1LL<<16), "BFu15i_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu17ll, BFu15i_BFu31ll_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu15i_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu1c, BFu15i_BFu31ll_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu15i_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu1i, BFu15i_BFu31ll_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu15i_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu1ll, BFu15i_BFu31ll_BFu1ll)
//============================================================================


struct  BFu15i_BFu31ll_BFu1s  {
  unsigned int v1:15;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu31ll_BFu1s) C1{ Fi:15 FL:31 Fs:1}



static void Test_BFu15i_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 6, 1, 1, "BFu15i_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu1s, BFu15i_BFu31ll_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu31i, BFu15i_BFu31ll_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 31, 1, "BFu15i_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu31ll, BFu15i_BFu31ll_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu32i, BFu15i_BFu31ll_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 32, 1, "BFu15i_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu15i_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu32ll, BFu15i_BFu31ll_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 33, 1, "BFu15i_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu15i_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu33, BFu15i_BFu31ll_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu15i_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu7c, BFu15i_BFu31ll_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 6, 7, 1, "BFu15i_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu7i, BFu15i_BFu31ll_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 6, 7, 1, "BFu15i_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu7ll, BFu15i_BFu31ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu31ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu31ll_BFu7s) C1{ Fi:15 FL:31 Fs:7}



static void Test_BFu15i_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu15i_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu7s, BFu15i_BFu31ll_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu15i_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu8c, BFu15i_BFu31ll_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 6, 8, 1, "BFu15i_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu8i, BFu15i_BFu31ll_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 6, 8, 1, "BFu15i_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu8ll, BFu15i_BFu31ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu31ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu31ll_BFu8s) C1{ Fi:15 FL:31 Fs:8}



static void Test_BFu15i_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu15i_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu8s, BFu15i_BFu31ll_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 6, 9, 1, "BFu15i_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu9i, BFu15i_BFu31ll_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 6, 9, 1, "BFu15i_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu9ll, BFu15i_BFu31ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu31ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu31ll_BFu9s) C1{ Fi:15 FL:31 Fs:9}



static void Test_BFu15i_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu15i_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_BFu9s, BFu15i_BFu31ll_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu31ll_C()
{
  {
    init_simple_test("BFu15i_BFu31ll_C");
    static STRUCT_IF_C BFu15i_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_C");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_C");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_C");
    check_field_offset(lv, v3, 6, "BFu15i_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_C, BFu15i_BFu31ll_C)
//============================================================================


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



static void Test_BFu15i_BFu31ll_D()
{
  {
    init_simple_test("BFu15i_BFu31ll_D");
    static STRUCT_IF_C BFu15i_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_D");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_D");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_D, BFu15i_BFu31ll_D)
//============================================================================


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



static void Test_BFu15i_BFu31ll_F()
{
  {
    init_simple_test("BFu15i_BFu31ll_F");
    static STRUCT_IF_C BFu15i_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_F");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_F");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_F, BFu15i_BFu31ll_F)
//============================================================================


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



static void Test_BFu15i_BFu31ll_I()
{
  {
    init_simple_test("BFu15i_BFu31ll_I");
    static STRUCT_IF_C BFu15i_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_I");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_I");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_I, BFu15i_BFu31ll_I)
//============================================================================


struct  BFu15i_BFu31ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu15i_BFu31ll_Ip) C1{ Fi:15 FL:31 Fp}



static void Test_BFu15i_BFu31ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu31ll_Ip");
    static STRUCT_IF_C BFu15i_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_Ip, BFu15i_BFu31ll_Ip)
//============================================================================


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



static void Test_BFu15i_BFu31ll_L()
{
  {
    init_simple_test("BFu15i_BFu31ll_L");
    static STRUCT_IF_C BFu15i_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_L");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_L");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_L, BFu15i_BFu31ll_L)
//============================================================================


struct  BFu15i_BFu31ll_S  {
  unsigned int v1:15;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu15i_BFu31ll_S) C1{ Fi:15 FL:31 Fs}



static void Test_BFu15i_BFu31ll_S()
{
  {
    init_simple_test("BFu15i_BFu31ll_S");
    static STRUCT_IF_C BFu15i_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_S");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_S");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu15i_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_S, BFu15i_BFu31ll_S)
//============================================================================


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



static void Test_BFu15i_BFu31ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu31ll_Uc");
    static STRUCT_IF_C BFu15i_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_Uc");
    check_field_offset(lv, v3, 6, "BFu15i_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_Uc, BFu15i_BFu31ll_Uc)
//============================================================================


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



static void Test_BFu15i_BFu31ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu31ll_Ui");
    static STRUCT_IF_C BFu15i_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_Ui, BFu15i_BFu31ll_Ui)
//============================================================================


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



static void Test_BFu15i_BFu31ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu31ll_Ul");
    static STRUCT_IF_C BFu15i_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_Ul, BFu15i_BFu31ll_Ul)
//============================================================================


struct  BFu15i_BFu31ll_Us  {
  unsigned int v1:15;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu31ll_Us) C1{ Fi:15 FL:31 Fs}



static void Test_BFu15i_BFu31ll_Us()
{
  {
    init_simple_test("BFu15i_BFu31ll_Us");
    static STRUCT_IF_C BFu15i_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu15i_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_Us, BFu15i_BFu31ll_Us)
//============================================================================


struct  BFu15i_BFu31ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu15i_BFu31ll_Vp) C1{ Fi:15 FL:31 Fp}



static void Test_BFu15i_BFu31ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu31ll_Vp");
    static STRUCT_IF_C BFu15i_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 31, 1, "BFu15i_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu15i_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu31ll_Vp, BFu15i_BFu31ll_Vp)
//============================================================================


struct  BFu15i_BFu32i  {
  unsigned int v1:15;
  unsigned int v2:32;
};
//SIG(1 BFu15i_BFu32i) C1{ Fi:15 Fi:32}



static void Test_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i, BFu15i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu15i, BFu15i_BFu32i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu15ll, BFu15i_BFu32i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu15s, BFu15i_BFu32i_BFu15s)
//============================================================================


struct  BFu15i_BFu32i_BFu16i  {
  unsigned int v1:15;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu32i_BFu16i) C1{ Fi:15 Fi:32 Fi:16}



static void Test_BFu15i_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu16i, BFu15i_BFu32i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu16ll, BFu15i_BFu32i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu16s, BFu15i_BFu32i_BFu16s)
//============================================================================


struct  BFu15i_BFu32i_BFu17i  {
  unsigned int v1:15;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu32i_BFu17i) C1{ Fi:15 Fi:32 Fi:17}



static void Test_BFu15i_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu17i, BFu15i_BFu32i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu17ll, BFu15i_BFu32i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu1c, BFu15i_BFu32i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu1i, BFu15i_BFu32i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu1ll, BFu15i_BFu32i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu1s, BFu15i_BFu32i_BFu1s)
//============================================================================


struct  BFu15i_BFu32i_BFu31i  {
  unsigned int v1:15;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu32i_BFu31i) C1{ Fi:15 Fi:32 Fi:31}



static void Test_BFu15i_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu31i, BFu15i_BFu32i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu31ll, BFu15i_BFu32i_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu32i, BFu15i_BFu32i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu32ll, BFu15i_BFu32i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu33");
    static STRUCT_IF_C BFu15i_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu15i_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu33, BFu15i_BFu32i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu7c, BFu15i_BFu32i_BFu7c)
//============================================================================


struct  BFu15i_BFu32i_BFu7i  {
  unsigned int v1:15;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu32i_BFu7i) C1{ Fi:15 Fi:32 Fi:7}



static void Test_BFu15i_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu7i, BFu15i_BFu32i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu7ll, BFu15i_BFu32i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu7s, BFu15i_BFu32i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu8c, BFu15i_BFu32i_BFu8c)
//============================================================================


struct  BFu15i_BFu32i_BFu8i  {
  unsigned int v1:15;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu32i_BFu8i) C1{ Fi:15 Fi:32 Fi:8}



static void Test_BFu15i_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu8i, BFu15i_BFu32i_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu8ll, BFu15i_BFu32i_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu8s, BFu15i_BFu32i_BFu8s)
//============================================================================


struct  BFu15i_BFu32i_BFu9i  {
  unsigned int v1:15;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu32i_BFu9i) C1{ Fi:15 Fi:32 Fi:9}



static void Test_BFu15i_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu9i, BFu15i_BFu32i_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu9ll, BFu15i_BFu32i_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu32i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_BFu9s, BFu15i_BFu32i_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu32i_C()
{
  {
    init_simple_test("BFu15i_BFu32i_C");
    static STRUCT_IF_C BFu15i_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_C, BFu15i_BFu32i_C)
//============================================================================


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



static void Test_BFu15i_BFu32i_D()
{
  {
    init_simple_test("BFu15i_BFu32i_D");
    static STRUCT_IF_C BFu15i_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_D, BFu15i_BFu32i_D)
//============================================================================


struct  BFu15i_BFu32i_F  {
  unsigned int v1:15;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu15i_BFu32i_F) C1{ Fi:15 Fi:32 Fi}



static void Test_BFu15i_BFu32i_F()
{
  {
    init_simple_test("BFu15i_BFu32i_F");
    static STRUCT_IF_C BFu15i_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_F, BFu15i_BFu32i_F)
//============================================================================


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



static void Test_BFu15i_BFu32i_I()
{
  {
    init_simple_test("BFu15i_BFu32i_I");
    static STRUCT_IF_C BFu15i_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_I, BFu15i_BFu32i_I)
//============================================================================


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



static void Test_BFu15i_BFu32i_Ip()
{
  {
    init_simple_test("BFu15i_BFu32i_Ip");
    static STRUCT_IF_C BFu15i_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_Ip, BFu15i_BFu32i_Ip)
//============================================================================


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



static void Test_BFu15i_BFu32i_L()
{
  {
    init_simple_test("BFu15i_BFu32i_L");
    static STRUCT_IF_C BFu15i_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_L, BFu15i_BFu32i_L)
//============================================================================


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



static void Test_BFu15i_BFu32i_S()
{
  {
    init_simple_test("BFu15i_BFu32i_S");
    static STRUCT_IF_C BFu15i_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_S, BFu15i_BFu32i_S)
//============================================================================


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



static void Test_BFu15i_BFu32i_Uc()
{
  {
    init_simple_test("BFu15i_BFu32i_Uc");
    static STRUCT_IF_C BFu15i_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_Uc, BFu15i_BFu32i_Uc)
//============================================================================


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



static void Test_BFu15i_BFu32i_Ui()
{
  {
    init_simple_test("BFu15i_BFu32i_Ui");
    static STRUCT_IF_C BFu15i_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_Ui, BFu15i_BFu32i_Ui)
//============================================================================


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



static void Test_BFu15i_BFu32i_Ul()
{
  {
    init_simple_test("BFu15i_BFu32i_Ul");
    static STRUCT_IF_C BFu15i_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_Ul, BFu15i_BFu32i_Ul)
//============================================================================


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



static void Test_BFu15i_BFu32i_Us()
{
  {
    init_simple_test("BFu15i_BFu32i_Us");
    static STRUCT_IF_C BFu15i_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_Us, BFu15i_BFu32i_Us)
//============================================================================


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



static void Test_BFu15i_BFu32i_Vp()
{
  {
    init_simple_test("BFu15i_BFu32i_Vp");
    static STRUCT_IF_C BFu15i_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu15i_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32i_Vp, BFu15i_BFu32i_Vp)
//============================================================================


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



static void Test_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll, BFu15i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu15i_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu15i, BFu15i_BFu32ll_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, 1, "BFu15i_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 5, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu15ll, BFu15i_BFu32ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu32ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu32ll_BFu15s) C1{ Fi:15 FL:32 Fs:15}



static void Test_BFu15i_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu15i_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu15s, BFu15i_BFu32ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu15i_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu16i, BFu15i_BFu32ll_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, 1, "BFu15i_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 5, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu16ll, BFu15i_BFu32ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu32ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu32ll_BFu16s) C1{ Fi:15 FL:32 Fs:16}



static void Test_BFu15i_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu15i_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu16s, BFu15i_BFu32ll_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu15i_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu17i, BFu15i_BFu32ll_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, 1, "BFu15i_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 5, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu17ll, BFu15i_BFu32ll_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu15i_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu1c, BFu15i_BFu32ll_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu15i_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu1i, BFu15i_BFu32ll_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu15i_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu1ll, BFu15i_BFu32ll_BFu1ll)
//============================================================================


struct  BFu15i_BFu32ll_BFu1s  {
  unsigned int v1:15;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu32ll_BFu1s) C1{ Fi:15 FL:32 Fs:1}



static void Test_BFu15i_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 5, 7, 1, 1, "BFu15i_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu1s, BFu15i_BFu32ll_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu31i, BFu15i_BFu32ll_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, 1, "BFu15i_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu15i_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu31ll, BFu15i_BFu32ll_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu32i, BFu15i_BFu32ll_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, 1, "BFu15i_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu32ll, BFu15i_BFu32ll_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, 1, "BFu15i_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu15i_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu33, BFu15i_BFu32ll_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu15i_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu7c, BFu15i_BFu32ll_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu15i_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu7i, BFu15i_BFu32ll_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, 1, "BFu15i_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 5, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu7ll, BFu15i_BFu32ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu32ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu32ll_BFu7s) C1{ Fi:15 FL:32 Fs:7}



static void Test_BFu15i_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu15i_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu7s, BFu15i_BFu32ll_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu15i_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu8c, BFu15i_BFu32ll_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu15i_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu8i, BFu15i_BFu32ll_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, 1, "BFu15i_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 5, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu8ll, BFu15i_BFu32ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu32ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu32ll_BFu8s) C1{ Fi:15 FL:32 Fs:8}



static void Test_BFu15i_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu15i_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu8s, BFu15i_BFu32ll_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu15i_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu9i, BFu15i_BFu32ll_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, 1, "BFu15i_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 5, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu9ll, BFu15i_BFu32ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu32ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu32ll_BFu9s) C1{ Fi:15 FL:32 Fs:9}



static void Test_BFu15i_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu15i_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_BFu9s, BFu15i_BFu32ll_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu32ll_C()
{
  {
    init_simple_test("BFu15i_BFu32ll_C");
    static STRUCT_IF_C BFu15i_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_C");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_C");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_C");
    check_field_offset(lv, v3, 6, "BFu15i_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_C, BFu15i_BFu32ll_C)
//============================================================================


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



static void Test_BFu15i_BFu32ll_D()
{
  {
    init_simple_test("BFu15i_BFu32ll_D");
    static STRUCT_IF_C BFu15i_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_D");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_D");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_D, BFu15i_BFu32ll_D)
//============================================================================


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



static void Test_BFu15i_BFu32ll_F()
{
  {
    init_simple_test("BFu15i_BFu32ll_F");
    static STRUCT_IF_C BFu15i_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_F");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_F");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_F, BFu15i_BFu32ll_F)
//============================================================================


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



static void Test_BFu15i_BFu32ll_I()
{
  {
    init_simple_test("BFu15i_BFu32ll_I");
    static STRUCT_IF_C BFu15i_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_I");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_I");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_I, BFu15i_BFu32ll_I)
//============================================================================


struct  BFu15i_BFu32ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu15i_BFu32ll_Ip) C1{ Fi:15 FL:32 Fp}



static void Test_BFu15i_BFu32ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu32ll_Ip");
    static STRUCT_IF_C BFu15i_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_Ip, BFu15i_BFu32ll_Ip)
//============================================================================


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



static void Test_BFu15i_BFu32ll_L()
{
  {
    init_simple_test("BFu15i_BFu32ll_L");
    static STRUCT_IF_C BFu15i_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_L");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_L");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_L, BFu15i_BFu32ll_L)
//============================================================================


struct  BFu15i_BFu32ll_S  {
  unsigned int v1:15;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu15i_BFu32ll_S) C1{ Fi:15 FL:32 Fs}



static void Test_BFu15i_BFu32ll_S()
{
  {
    init_simple_test("BFu15i_BFu32ll_S");
    static STRUCT_IF_C BFu15i_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_S");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_S");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_S");
    check_field_offset(lv, v3, 6, "BFu15i_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_S, BFu15i_BFu32ll_S)
//============================================================================


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



static void Test_BFu15i_BFu32ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu32ll_Uc");
    static STRUCT_IF_C BFu15i_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_Uc");
    check_field_offset(lv, v3, 6, "BFu15i_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_Uc, BFu15i_BFu32ll_Uc)
//============================================================================


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



static void Test_BFu15i_BFu32ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu32ll_Ui");
    static STRUCT_IF_C BFu15i_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_Ui, BFu15i_BFu32ll_Ui)
//============================================================================


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



static void Test_BFu15i_BFu32ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu32ll_Ul");
    static STRUCT_IF_C BFu15i_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_Ul, BFu15i_BFu32ll_Ul)
//============================================================================


struct  BFu15i_BFu32ll_Us  {
  unsigned int v1:15;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu32ll_Us) C1{ Fi:15 FL:32 Fs}



static void Test_BFu15i_BFu32ll_Us()
{
  {
    init_simple_test("BFu15i_BFu32ll_Us");
    static STRUCT_IF_C BFu15i_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "BFu15i_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_Us, BFu15i_BFu32ll_Us)
//============================================================================


struct  BFu15i_BFu32ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu15i_BFu32ll_Vp) C1{ Fi:15 FL:32 Fp}



static void Test_BFu15i_BFu32ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu32ll_Vp");
    static STRUCT_IF_C BFu15i_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 32, 1, "BFu15i_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu15i_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu32ll_Vp, BFu15i_BFu32ll_Vp)
//============================================================================


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



static void Test_BFu15i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu33");
    static STRUCT_IF_C BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33, BFu15i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu15i");
    static STRUCT_IF_C BFu15i_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu15i_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu15i, BFu15i_BFu33_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu15i_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu15ll, BFu15i_BFu33_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu33_BFu15s");
    static STRUCT_IF_C BFu15i_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu15i_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu15s, BFu15i_BFu33_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu16i");
    static STRUCT_IF_C BFu15i_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu15i_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu16i, BFu15i_BFu33_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu15i_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu16ll, BFu15i_BFu33_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu33_BFu16s");
    static STRUCT_IF_C BFu15i_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu15i_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu16s, BFu15i_BFu33_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu17i");
    static STRUCT_IF_C BFu15i_BFu33_BFu17i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu17i, BFu15i_BFu33_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, 1, "BFu15i_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 17, hide_ull(1LL<<16), "BFu15i_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu17ll, BFu15i_BFu33_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu33_BFu1c");
    static STRUCT_IF_C BFu15i_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu15i_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu1c, BFu15i_BFu33_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu1i");
    static STRUCT_IF_C BFu15i_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu15i_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu1i, BFu15i_BFu33_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu15i_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu1ll, BFu15i_BFu33_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu33_BFu1s");
    static STRUCT_IF_C BFu15i_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 6, 0, 1, 1, "BFu15i_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu1s, BFu15i_BFu33_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu31i");
    static STRUCT_IF_C BFu15i_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu31i, BFu15i_BFu33_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, 1, "BFu15i_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 31, hide_ull(1LL<<30), "BFu15i_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu31ll, BFu15i_BFu33_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu32i");
    static STRUCT_IF_C BFu15i_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu32i, BFu15i_BFu33_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, 1, "BFu15i_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 32, hide_ull(1LL<<31), "BFu15i_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu32ll, BFu15i_BFu33_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu33()
{
  {
    init_simple_test("BFu15i_BFu33_BFu33");
    static STRUCT_IF_C BFu15i_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, 1, "BFu15i_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,6), 0, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu33, BFu15i_BFu33_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu33_BFu7c");
    static STRUCT_IF_C BFu15i_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu15i_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu7c, BFu15i_BFu33_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu7i");
    static STRUCT_IF_C BFu15i_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu15i_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu7i, BFu15i_BFu33_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu15i_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu7ll, BFu15i_BFu33_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu33_BFu7s");
    static STRUCT_IF_C BFu15i_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, 1, "BFu15i_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 6, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu7s, BFu15i_BFu33_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu33_BFu8c");
    static STRUCT_IF_C BFu15i_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu15i_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu8c, BFu15i_BFu33_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu8i");
    static STRUCT_IF_C BFu15i_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu15i_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu8i, BFu15i_BFu33_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu15i_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu8ll, BFu15i_BFu33_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu33_BFu8s");
    static STRUCT_IF_C BFu15i_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, 1, "BFu15i_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 6, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu8s, BFu15i_BFu33_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu33_BFu9i");
    static STRUCT_IF_C BFu15i_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu15i_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu9i, BFu15i_BFu33_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu33_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu15i_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu9ll, BFu15i_BFu33_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu33_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu33_BFu9s");
    static STRUCT_IF_C BFu15i_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu15i_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_BFu9s, BFu15i_BFu33_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu33_C()
{
  {
    init_simple_test("BFu15i_BFu33_C");
    static STRUCT_IF_C BFu15i_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_C");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_C");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_C");
    check_field_offset(lv, v3, 6, "BFu15i_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_C, BFu15i_BFu33_C)
//============================================================================


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



static void Test_BFu15i_BFu33_D()
{
  {
    init_simple_test("BFu15i_BFu33_D");
    static STRUCT_IF_C BFu15i_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_D");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_D");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu15i_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_D, BFu15i_BFu33_D)
//============================================================================


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



static void Test_BFu15i_BFu33_F()
{
  {
    init_simple_test("BFu15i_BFu33_F");
    static STRUCT_IF_C BFu15i_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_F");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_F");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu15i_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_F, BFu15i_BFu33_F)
//============================================================================


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



static void Test_BFu15i_BFu33_I()
{
  {
    init_simple_test("BFu15i_BFu33_I");
    static STRUCT_IF_C BFu15i_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_I");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_I");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu15i_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_I, BFu15i_BFu33_I)
//============================================================================


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



static void Test_BFu15i_BFu33_Ip()
{
  {
    init_simple_test("BFu15i_BFu33_Ip");
    static STRUCT_IF_C BFu15i_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_Ip");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_Ip");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu15i_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_Ip, BFu15i_BFu33_Ip)
//============================================================================


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



static void Test_BFu15i_BFu33_L()
{
  {
    init_simple_test("BFu15i_BFu33_L");
    static STRUCT_IF_C BFu15i_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_L");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_L");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu15i_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_L, BFu15i_BFu33_L)
//============================================================================


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



static void Test_BFu15i_BFu33_S()
{
  {
    init_simple_test("BFu15i_BFu33_S");
    static STRUCT_IF_C BFu15i_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_S");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_S");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_S");
    check_field_offset(lv, v3, 6, "BFu15i_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_S, BFu15i_BFu33_S)
//============================================================================


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



static void Test_BFu15i_BFu33_Uc()
{
  {
    init_simple_test("BFu15i_BFu33_Uc");
    static STRUCT_IF_C BFu15i_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_Uc");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_Uc");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_Uc");
    check_field_offset(lv, v3, 6, "BFu15i_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_Uc, BFu15i_BFu33_Uc)
//============================================================================


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



static void Test_BFu15i_BFu33_Ui()
{
  {
    init_simple_test("BFu15i_BFu33_Ui");
    static STRUCT_IF_C BFu15i_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_Ui");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_Ui");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu15i_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_Ui, BFu15i_BFu33_Ui)
//============================================================================


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



static void Test_BFu15i_BFu33_Ul()
{
  {
    init_simple_test("BFu15i_BFu33_Ul");
    static STRUCT_IF_C BFu15i_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_Ul");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_Ul");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu15i_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_Ul, BFu15i_BFu33_Ul)
//============================================================================


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



static void Test_BFu15i_BFu33_Us()
{
  {
    init_simple_test("BFu15i_BFu33_Us");
    static STRUCT_IF_C BFu15i_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_Us");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_Us");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_Us");
    check_field_offset(lv, v3, 6, "BFu15i_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_Us, BFu15i_BFu33_Us)
//============================================================================


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



static void Test_BFu15i_BFu33_Vp()
{
  {
    init_simple_test("BFu15i_BFu33_Vp");
    static STRUCT_IF_C BFu15i_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu33_Vp");
    set_bf_and_test(lv, v2, 1, 7, 33, 1, "BFu15i_BFu33_Vp");
    set_bf_and_test(lv, v2, 1, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu15i_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu33_Vp, BFu15i_BFu33_Vp)
//============================================================================


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



static void Test_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c, BFu15i_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu15i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu15i, BFu15i_BFu7c_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu15i_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu15ll, BFu15i_BFu7c_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu15s");
    static STRUCT_IF_C BFu15i_BFu7c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu15s, BFu15i_BFu7c_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu16i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu16i, BFu15i_BFu7c_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu15i_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu16ll, BFu15i_BFu7c_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu16s");
    static STRUCT_IF_C BFu15i_BFu7c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu16s, BFu15i_BFu7c_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu17i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu17i, BFu15i_BFu7c_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu15i_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu17ll, BFu15i_BFu7c_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu1c");
    static STRUCT_IF_C BFu15i_BFu7c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu1c, BFu15i_BFu7c_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu1i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu1i, BFu15i_BFu7c_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu1ll, BFu15i_BFu7c_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu1s");
    static STRUCT_IF_C BFu15i_BFu7c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu1s, BFu15i_BFu7c_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu31i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu31i, BFu15i_BFu7c_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu15i_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu31ll, BFu15i_BFu7c_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu32i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu32i, BFu15i_BFu7c_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu15i_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu32ll, BFu15i_BFu7c_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu33()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu33");
    static STRUCT_IF_C BFu15i_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu15i_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu33, BFu15i_BFu7c_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu15i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu7c, BFu15i_BFu7c_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu7i, BFu15i_BFu7c_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu7ll, BFu15i_BFu7c_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu15i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu7s, BFu15i_BFu7c_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu8c");
    static STRUCT_IF_C BFu15i_BFu7c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu8c, BFu15i_BFu7c_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu8i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu8i, BFu15i_BFu7c_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu8ll, BFu15i_BFu7c_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu8s");
    static STRUCT_IF_C BFu15i_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu8s, BFu15i_BFu7c_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu9i");
    static STRUCT_IF_C BFu15i_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu9i, BFu15i_BFu7c_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu9ll, BFu15i_BFu7c_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu7c_BFu9s");
    static STRUCT_IF_C BFu15i_BFu7c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_BFu9s, BFu15i_BFu7c_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu7c_C()
{
  {
    init_simple_test("BFu15i_BFu7c_C");
    static STRUCT_IF_C BFu15i_BFu7c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_C");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_C");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_C, BFu15i_BFu7c_C)
//============================================================================


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



static void Test_BFu15i_BFu7c_D()
{
  {
    init_simple_test("BFu15i_BFu7c_D");
    static STRUCT_IF_C BFu15i_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_D");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_D");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_D, BFu15i_BFu7c_D)
//============================================================================


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



static void Test_BFu15i_BFu7c_F()
{
  {
    init_simple_test("BFu15i_BFu7c_F");
    static STRUCT_IF_C BFu15i_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_F");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_F");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_F, BFu15i_BFu7c_F)
//============================================================================


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



static void Test_BFu15i_BFu7c_I()
{
  {
    init_simple_test("BFu15i_BFu7c_I");
    static STRUCT_IF_C BFu15i_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_I");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_I");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_I, BFu15i_BFu7c_I)
//============================================================================


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



static void Test_BFu15i_BFu7c_Ip()
{
  {
    init_simple_test("BFu15i_BFu7c_Ip");
    static STRUCT_IF_C BFu15i_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_Ip, BFu15i_BFu7c_Ip)
//============================================================================


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



static void Test_BFu15i_BFu7c_L()
{
  {
    init_simple_test("BFu15i_BFu7c_L");
    static STRUCT_IF_C BFu15i_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_L");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_L");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_L, BFu15i_BFu7c_L)
//============================================================================


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



static void Test_BFu15i_BFu7c_S()
{
  {
    init_simple_test("BFu15i_BFu7c_S");
    static STRUCT_IF_C BFu15i_BFu7c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_S");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_S");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_S, BFu15i_BFu7c_S)
//============================================================================


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



static void Test_BFu15i_BFu7c_Uc()
{
  {
    init_simple_test("BFu15i_BFu7c_Uc");
    static STRUCT_IF_C BFu15i_BFu7c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_Uc, BFu15i_BFu7c_Uc)
//============================================================================


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



static void Test_BFu15i_BFu7c_Ui()
{
  {
    init_simple_test("BFu15i_BFu7c_Ui");
    static STRUCT_IF_C BFu15i_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_Ui, BFu15i_BFu7c_Ui)
//============================================================================


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



static void Test_BFu15i_BFu7c_Ul()
{
  {
    init_simple_test("BFu15i_BFu7c_Ul");
    static STRUCT_IF_C BFu15i_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_Ul, BFu15i_BFu7c_Ul)
//============================================================================


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



static void Test_BFu15i_BFu7c_Us()
{
  {
    init_simple_test("BFu15i_BFu7c_Us");
    static STRUCT_IF_C BFu15i_BFu7c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_Us, BFu15i_BFu7c_Us)
//============================================================================


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



static void Test_BFu15i_BFu7c_Vp()
{
  {
    init_simple_test("BFu15i_BFu7c_Vp");
    static STRUCT_IF_C BFu15i_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7c_Vp, BFu15i_BFu7c_Vp)
//============================================================================


struct  BFu15i_BFu7i  {
  unsigned int v1:15;
  unsigned int v2:7;
};
//SIG(1 BFu15i_BFu7i) C1{ Fi:15 Fi:7}



static void Test_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i, BFu15i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu15i, BFu15i_BFu7i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, 1, "BFu15i_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu15ll, BFu15i_BFu7i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu7i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu15s, BFu15i_BFu7i_BFu15s)
//============================================================================


struct  BFu15i_BFu7i_BFu16i  {
  unsigned int v1:15;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu7i_BFu16i) C1{ Fi:15 Fi:7 Fi:16}



static void Test_BFu15i_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu16i, BFu15i_BFu7i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu15i_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu15i_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu16ll, BFu15i_BFu7i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu7i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu16s, BFu15i_BFu7i_BFu16s)
//============================================================================


struct  BFu15i_BFu7i_BFu17i  {
  unsigned int v1:15;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu7i_BFu17i) C1{ Fi:15 Fi:7 Fi:17}



static void Test_BFu15i_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu17i, BFu15i_BFu7i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu15i_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu15i_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu17ll, BFu15i_BFu7i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu15i_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu1c, BFu15i_BFu7i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu15i_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu1i, BFu15i_BFu7i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu15i_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu1ll, BFu15i_BFu7i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu15i_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu1s, BFu15i_BFu7i_BFu1s)
//============================================================================


struct  BFu15i_BFu7i_BFu31i  {
  unsigned int v1:15;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu7i_BFu31i) C1{ Fi:15 Fi:7 Fi:31}



static void Test_BFu15i_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu31i, BFu15i_BFu7i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu15i_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu15i_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu31ll, BFu15i_BFu7i_BFu31ll)
//============================================================================


struct  BFu15i_BFu7i_BFu32i  {
  unsigned int v1:15;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu7i_BFu32i) C1{ Fi:15 Fi:7 Fi:32}



static void Test_BFu15i_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu32i, BFu15i_BFu7i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu15i_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu15i_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu32ll, BFu15i_BFu7i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu33");
    static STRUCT_IF_C BFu15i_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu15i_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu15i_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu33, BFu15i_BFu7i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu7c, BFu15i_BFu7i_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu15i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu7i, BFu15i_BFu7i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu15i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu7ll, BFu15i_BFu7i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu15i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu7s, BFu15i_BFu7i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu8c, BFu15i_BFu7i_BFu8c)
//============================================================================


struct  BFu15i_BFu7i_BFu8i  {
  unsigned int v1:15;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu7i_BFu8i) C1{ Fi:15 Fi:7 Fi:8}



static void Test_BFu15i_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu15i_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu8i, BFu15i_BFu7i_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu15i_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu8ll, BFu15i_BFu7i_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu15i_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu8s, BFu15i_BFu7i_BFu8s)
//============================================================================


struct  BFu15i_BFu7i_BFu9i  {
  unsigned int v1:15;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu7i_BFu9i) C1{ Fi:15 Fi:7 Fi:9}



static void Test_BFu15i_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu15i_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu9i, BFu15i_BFu7i_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu15i_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu9ll, BFu15i_BFu7i_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu7i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu15i_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_BFu9s, BFu15i_BFu7i_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu7i_C()
{
  {
    init_simple_test("BFu15i_BFu7i_C");
    static STRUCT_IF_C BFu15i_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_C");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_C");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_C, BFu15i_BFu7i_C)
//============================================================================


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



static void Test_BFu15i_BFu7i_D()
{
  {
    init_simple_test("BFu15i_BFu7i_D");
    static STRUCT_IF_C BFu15i_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_D");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_D");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_D, BFu15i_BFu7i_D)
//============================================================================


struct  BFu15i_BFu7i_F  {
  unsigned int v1:15;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu15i_BFu7i_F) C1{ Fi:15 Fi:7 Fi}



static void Test_BFu15i_BFu7i_F()
{
  {
    init_simple_test("BFu15i_BFu7i_F");
    static STRUCT_IF_C BFu15i_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_F");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_F");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_F, BFu15i_BFu7i_F)
//============================================================================


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



static void Test_BFu15i_BFu7i_I()
{
  {
    init_simple_test("BFu15i_BFu7i_I");
    static STRUCT_IF_C BFu15i_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_I");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_I");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_I, BFu15i_BFu7i_I)
//============================================================================


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



static void Test_BFu15i_BFu7i_Ip()
{
  {
    init_simple_test("BFu15i_BFu7i_Ip");
    static STRUCT_IF_C BFu15i_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_Ip, BFu15i_BFu7i_Ip)
//============================================================================


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



static void Test_BFu15i_BFu7i_L()
{
  {
    init_simple_test("BFu15i_BFu7i_L");
    static STRUCT_IF_C BFu15i_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_L");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_L");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_L, BFu15i_BFu7i_L)
//============================================================================


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



static void Test_BFu15i_BFu7i_S()
{
  {
    init_simple_test("BFu15i_BFu7i_S");
    static STRUCT_IF_C BFu15i_BFu7i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_S");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_S");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_S, BFu15i_BFu7i_S)
//============================================================================


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



static void Test_BFu15i_BFu7i_Uc()
{
  {
    init_simple_test("BFu15i_BFu7i_Uc");
    static STRUCT_IF_C BFu15i_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_Uc, BFu15i_BFu7i_Uc)
//============================================================================


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



static void Test_BFu15i_BFu7i_Ui()
{
  {
    init_simple_test("BFu15i_BFu7i_Ui");
    static STRUCT_IF_C BFu15i_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_Ui, BFu15i_BFu7i_Ui)
//============================================================================


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



static void Test_BFu15i_BFu7i_Ul()
{
  {
    init_simple_test("BFu15i_BFu7i_Ul");
    static STRUCT_IF_C BFu15i_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_Ul, BFu15i_BFu7i_Ul)
//============================================================================


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



static void Test_BFu15i_BFu7i_Us()
{
  {
    init_simple_test("BFu15i_BFu7i_Us");
    static STRUCT_IF_C BFu15i_BFu7i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_Us");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_Us");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_Us, BFu15i_BFu7i_Us)
//============================================================================


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



static void Test_BFu15i_BFu7i_Vp()
{
  {
    init_simple_test("BFu15i_BFu7i_Vp");
    static STRUCT_IF_C BFu15i_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7i_Vp, BFu15i_BFu7i_Vp)
//============================================================================


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



static void Test_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll, BFu15i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu15i, BFu15i_BFu7ll_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, 1, "BFu15i_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu15ll, BFu15i_BFu7ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu7ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu7ll_BFu15s) C1{ Fi:15 FL:7 Fs:15}



static void Test_BFu15i_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu15s, BFu15i_BFu7ll_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu16i, BFu15i_BFu7ll_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu15i_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu15i_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu16ll, BFu15i_BFu7ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu7ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu7ll_BFu16s) C1{ Fi:15 FL:7 Fs:16}



static void Test_BFu15i_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu16s, BFu15i_BFu7ll_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu17i, BFu15i_BFu7ll_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu15i_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu15i_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu17ll, BFu15i_BFu7ll_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu15i_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu1c, BFu15i_BFu7ll_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu15i_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu1i, BFu15i_BFu7ll_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu15i_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu1ll, BFu15i_BFu7ll_BFu1ll)
//============================================================================


struct  BFu15i_BFu7ll_BFu1s  {
  unsigned int v1:15;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu7ll_BFu1s) C1{ Fi:15 FL:7 Fs:1}



static void Test_BFu15i_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu15i_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu1s, BFu15i_BFu7ll_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu31i, BFu15i_BFu7ll_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu15i_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu15i_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu31ll, BFu15i_BFu7ll_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu32i, BFu15i_BFu7ll_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu15i_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu15i_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu32ll, BFu15i_BFu7ll_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu15i_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu15i_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu33, BFu15i_BFu7ll_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu7c, BFu15i_BFu7ll_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu15i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu7i, BFu15i_BFu7ll_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu15i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu7ll, BFu15i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu7ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu7ll_BFu7s) C1{ Fi:15 FL:7 Fs:7}



static void Test_BFu15i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu15i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu7s, BFu15i_BFu7ll_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu8c, BFu15i_BFu7ll_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu15i_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu8i, BFu15i_BFu7ll_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu15i_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu8ll, BFu15i_BFu7ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu7ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu7ll_BFu8s) C1{ Fi:15 FL:7 Fs:8}



static void Test_BFu15i_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu15i_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu15i_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu8s, BFu15i_BFu7ll_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu15i_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu9i, BFu15i_BFu7ll_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu15i_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu9ll, BFu15i_BFu7ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu7ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu7ll_BFu9s) C1{ Fi:15 FL:7 Fs:9}



static void Test_BFu15i_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu15i_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu15i_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_BFu9s, BFu15i_BFu7ll_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu7ll_C()
{
  {
    init_simple_test("BFu15i_BFu7ll_C");
    static STRUCT_IF_C BFu15i_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_C");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_C");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_C, BFu15i_BFu7ll_C)
//============================================================================


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



static void Test_BFu15i_BFu7ll_D()
{
  {
    init_simple_test("BFu15i_BFu7ll_D");
    static STRUCT_IF_C BFu15i_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_D");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_D");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_D, BFu15i_BFu7ll_D)
//============================================================================


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



static void Test_BFu15i_BFu7ll_F()
{
  {
    init_simple_test("BFu15i_BFu7ll_F");
    static STRUCT_IF_C BFu15i_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_F");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_F");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_F, BFu15i_BFu7ll_F)
//============================================================================


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



static void Test_BFu15i_BFu7ll_I()
{
  {
    init_simple_test("BFu15i_BFu7ll_I");
    static STRUCT_IF_C BFu15i_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_I");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_I");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_I, BFu15i_BFu7ll_I)
//============================================================================


struct  BFu15i_BFu7ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu15i_BFu7ll_Ip) C1{ Fi:15 FL:7 Fp}



static void Test_BFu15i_BFu7ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu7ll_Ip");
    static STRUCT_IF_C BFu15i_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_Ip, BFu15i_BFu7ll_Ip)
//============================================================================


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



static void Test_BFu15i_BFu7ll_L()
{
  {
    init_simple_test("BFu15i_BFu7ll_L");
    static STRUCT_IF_C BFu15i_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_L");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_L");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_L, BFu15i_BFu7ll_L)
//============================================================================


struct  BFu15i_BFu7ll_S  {
  unsigned int v1:15;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu15i_BFu7ll_S) C1{ Fi:15 FL:7 Fs}



static void Test_BFu15i_BFu7ll_S()
{
  {
    init_simple_test("BFu15i_BFu7ll_S");
    static STRUCT_IF_C BFu15i_BFu7ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_S");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_S");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_S, BFu15i_BFu7ll_S)
//============================================================================


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



static void Test_BFu15i_BFu7ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu7ll_Uc");
    static STRUCT_IF_C BFu15i_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_Uc, BFu15i_BFu7ll_Uc)
//============================================================================


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



static void Test_BFu15i_BFu7ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu7ll_Ui");
    static STRUCT_IF_C BFu15i_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_Ui, BFu15i_BFu7ll_Ui)
//============================================================================


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



static void Test_BFu15i_BFu7ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu7ll_Ul");
    static STRUCT_IF_C BFu15i_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_Ul, BFu15i_BFu7ll_Ul)
//============================================================================


struct  BFu15i_BFu7ll_Us  {
  unsigned int v1:15;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu7ll_Us) C1{ Fi:15 FL:7 Fs}



static void Test_BFu15i_BFu7ll_Us()
{
  {
    init_simple_test("BFu15i_BFu7ll_Us");
    static STRUCT_IF_C BFu15i_BFu7ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_Us, BFu15i_BFu7ll_Us)
//============================================================================


struct  BFu15i_BFu7ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu15i_BFu7ll_Vp) C1{ Fi:15 FL:7 Fp}



static void Test_BFu15i_BFu7ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu7ll_Vp");
    static STRUCT_IF_C BFu15i_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 7, 1, "BFu15i_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7ll_Vp, BFu15i_BFu7ll_Vp)
//============================================================================


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



static void Test_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s, BFu15i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu15i, BFu15i_BFu7s_BFu15i)
//============================================================================


struct  BFu15i_BFu7s_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFu7s_BFu15ll) C1{ Fi:15 Fs:7 FL:15}



static void Test_BFu15i_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu15i_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu15ll, BFu15i_BFu7s_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu7s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu15s, BFu15i_BFu7s_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu16i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu16i, BFu15i_BFu7s_BFu16i)
//============================================================================


struct  BFu15i_BFu7s_BFu16ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu7s_BFu16ll) C1{ Fi:15 Fs:7 FL:16}



static void Test_BFu15i_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu15i_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu16ll, BFu15i_BFu7s_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu16s");
    static STRUCT_IF_C BFu15i_BFu7s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu16s, BFu15i_BFu7s_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu17i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu17i, BFu15i_BFu7s_BFu17i)
//============================================================================


struct  BFu15i_BFu7s_BFu17ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu7s_BFu17ll) C1{ Fi:15 Fs:7 FL:17}



static void Test_BFu15i_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu15i_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu17ll, BFu15i_BFu7s_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu1c");
    static STRUCT_IF_C BFu15i_BFu7s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu1c, BFu15i_BFu7s_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu1i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu1i, BFu15i_BFu7s_BFu1i)
//============================================================================


struct  BFu15i_BFu7s_BFu1ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_BFu7s_BFu1ll) C1{ Fi:15 Fs:7 FL:1}



static void Test_BFu15i_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu1ll, BFu15i_BFu7s_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu1s");
    static STRUCT_IF_C BFu15i_BFu7s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu1s, BFu15i_BFu7s_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu31i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu31i, BFu15i_BFu7s_BFu31i)
//============================================================================


struct  BFu15i_BFu7s_BFu31ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu7s_BFu31ll) C1{ Fi:15 Fs:7 FL:31}



static void Test_BFu15i_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu15i_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu31ll, BFu15i_BFu7s_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu32i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu32i, BFu15i_BFu7s_BFu32i)
//============================================================================


struct  BFu15i_BFu7s_BFu32ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu7s_BFu32ll) C1{ Fi:15 Fs:7 FL:32}



static void Test_BFu15i_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu15i_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu32ll, BFu15i_BFu7s_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu33()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu33");
    static STRUCT_IF_C BFu15i_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu15i_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu33, BFu15i_BFu7s_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu15i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu7c, BFu15i_BFu7s_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu7i, BFu15i_BFu7s_BFu7i)
//============================================================================


struct  BFu15i_BFu7s_BFu7ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu7s_BFu7ll) C1{ Fi:15 Fs:7 FL:7}



static void Test_BFu15i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu7ll, BFu15i_BFu7s_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu15i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu7s, BFu15i_BFu7s_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu8c");
    static STRUCT_IF_C BFu15i_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu8c, BFu15i_BFu7s_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu8i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu8i, BFu15i_BFu7s_BFu8i)
//============================================================================


struct  BFu15i_BFu7s_BFu8ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu7s_BFu8ll) C1{ Fi:15 Fs:7 FL:8}



static void Test_BFu15i_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu8ll, BFu15i_BFu7s_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu8s");
    static STRUCT_IF_C BFu15i_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu8s, BFu15i_BFu7s_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu9i");
    static STRUCT_IF_C BFu15i_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu9i, BFu15i_BFu7s_BFu9i)
//============================================================================


struct  BFu15i_BFu7s_BFu9ll  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu7s_BFu9ll) C1{ Fi:15 Fs:7 FL:9}



static void Test_BFu15i_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu9ll, BFu15i_BFu7s_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu7s_BFu9s");
    static STRUCT_IF_C BFu15i_BFu7s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_BFu9s, BFu15i_BFu7s_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu7s_C()
{
  {
    init_simple_test("BFu15i_BFu7s_C");
    static STRUCT_IF_C BFu15i_BFu7s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_C");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_C, BFu15i_BFu7s_C)
//============================================================================


struct  BFu15i_BFu7s_D  {
  unsigned int v1:15;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu15i_BFu7s_D) C1{ Fi:15 Fs:7 FL}



static void Test_BFu15i_BFu7s_D()
{
  {
    init_simple_test("BFu15i_BFu7s_D");
    static STRUCT_IF_C BFu15i_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_D");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_D, BFu15i_BFu7s_D)
//============================================================================


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



static void Test_BFu15i_BFu7s_F()
{
  {
    init_simple_test("BFu15i_BFu7s_F");
    static STRUCT_IF_C BFu15i_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_F");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_F, BFu15i_BFu7s_F)
//============================================================================


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



static void Test_BFu15i_BFu7s_I()
{
  {
    init_simple_test("BFu15i_BFu7s_I");
    static STRUCT_IF_C BFu15i_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_I");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_I, BFu15i_BFu7s_I)
//============================================================================


struct  BFu15i_BFu7s_Ip  {
  unsigned int v1:15;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu15i_BFu7s_Ip) C1{ Fi:15 Fs:7 Fp}



static void Test_BFu15i_BFu7s_Ip()
{
  {
    init_simple_test("BFu15i_BFu7s_Ip");
    static STRUCT_IF_C BFu15i_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_Ip, BFu15i_BFu7s_Ip)
//============================================================================


struct  BFu15i_BFu7s_L  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu7s_L) C1{ Fi:15 Fs:7 FL}



static void Test_BFu15i_BFu7s_L()
{
  {
    init_simple_test("BFu15i_BFu7s_L");
    static STRUCT_IF_C BFu15i_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_L");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_L, BFu15i_BFu7s_L)
//============================================================================


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



static void Test_BFu15i_BFu7s_S()
{
  {
    init_simple_test("BFu15i_BFu7s_S");
    static STRUCT_IF_C BFu15i_BFu7s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_S");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_S, BFu15i_BFu7s_S)
//============================================================================


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



static void Test_BFu15i_BFu7s_Uc()
{
  {
    init_simple_test("BFu15i_BFu7s_Uc");
    static STRUCT_IF_C BFu15i_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu7s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_Uc, BFu15i_BFu7s_Uc)
//============================================================================


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



static void Test_BFu15i_BFu7s_Ui()
{
  {
    init_simple_test("BFu15i_BFu7s_Ui");
    static STRUCT_IF_C BFu15i_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_Ui, BFu15i_BFu7s_Ui)
//============================================================================


struct  BFu15i_BFu7s_Ul  {
  unsigned int v1:15;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu15i_BFu7s_Ul) C1{ Fi:15 Fs:7 FL}



static void Test_BFu15i_BFu7s_Ul()
{
  {
    init_simple_test("BFu15i_BFu7s_Ul");
    static STRUCT_IF_C BFu15i_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_Ul, BFu15i_BFu7s_Ul)
//============================================================================


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



static void Test_BFu15i_BFu7s_Us()
{
  {
    init_simple_test("BFu15i_BFu7s_Us");
    static STRUCT_IF_C BFu15i_BFu7s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu7s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_Us");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_Us, BFu15i_BFu7s_Us)
//============================================================================


struct  BFu15i_BFu7s_Vp  {
  unsigned int v1:15;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu15i_BFu7s_Vp) C1{ Fi:15 Fs:7 Fp}



static void Test_BFu15i_BFu7s_Vp()
{
  {
    init_simple_test("BFu15i_BFu7s_Vp");
    static STRUCT_IF_C BFu15i_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, 1, "BFu15i_BFu7s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu7s_Vp, BFu15i_BFu7s_Vp)
//============================================================================


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



static void Test_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c, BFu15i_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu15i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu15i, BFu15i_BFu8c_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15i_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu15ll, BFu15i_BFu8c_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu15s");
    static STRUCT_IF_C BFu15i_BFu8c_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu15s, BFu15i_BFu8c_BFu15s)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu16i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu16i, BFu15i_BFu8c_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15i_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu16ll, BFu15i_BFu8c_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu16s");
    static STRUCT_IF_C BFu15i_BFu8c_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu16s, BFu15i_BFu8c_BFu16s)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu17i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu17i, BFu15i_BFu8c_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15i_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu17ll, BFu15i_BFu8c_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu1c");
    static STRUCT_IF_C BFu15i_BFu8c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu1c, BFu15i_BFu8c_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu1i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu1i, BFu15i_BFu8c_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu1ll, BFu15i_BFu8c_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu1s");
    static STRUCT_IF_C BFu15i_BFu8c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu1s, BFu15i_BFu8c_BFu1s)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu31i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu31i, BFu15i_BFu8c_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15i_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu31ll, BFu15i_BFu8c_BFu31ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu32i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu32i, BFu15i_BFu8c_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15i_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu32ll, BFu15i_BFu8c_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu33()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu33");
    static STRUCT_IF_C BFu15i_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15i_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu33, BFu15i_BFu8c_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu7c");
    static STRUCT_IF_C BFu15i_BFu8c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu7c, BFu15i_BFu8c_BFu7c)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu7i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu7i, BFu15i_BFu8c_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu7ll, BFu15i_BFu8c_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu7s");
    static STRUCT_IF_C BFu15i_BFu8c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu7s, BFu15i_BFu8c_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu8c");
    static STRUCT_IF_C BFu15i_BFu8c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu8c, BFu15i_BFu8c_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu8i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu8i, BFu15i_BFu8c_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu8ll, BFu15i_BFu8c_BFu8ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu8s");
    static STRUCT_IF_C BFu15i_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu8s, BFu15i_BFu8c_BFu8s)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu9i");
    static STRUCT_IF_C BFu15i_BFu8c_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu9i, BFu15i_BFu8c_BFu9i)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu8c_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15i_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu9ll, BFu15i_BFu8c_BFu9ll)
//============================================================================


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



static void Test_BFu15i_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu8c_BFu9s");
    static STRUCT_IF_C BFu15i_BFu8c_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_BFu9s, BFu15i_BFu8c_BFu9s)
//============================================================================


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



static void Test_BFu15i_BFu8c_C()
{
  {
    init_simple_test("BFu15i_BFu8c_C");
    static STRUCT_IF_C BFu15i_BFu8c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_C, BFu15i_BFu8c_C)
//============================================================================


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



static void Test_BFu15i_BFu8c_D()
{
  {
    init_simple_test("BFu15i_BFu8c_D");
    static STRUCT_IF_C BFu15i_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_D, BFu15i_BFu8c_D)
//============================================================================


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



static void Test_BFu15i_BFu8c_F()
{
  {
    init_simple_test("BFu15i_BFu8c_F");
    static STRUCT_IF_C BFu15i_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_F, BFu15i_BFu8c_F)
//============================================================================


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



static void Test_BFu15i_BFu8c_I()
{
  {
    init_simple_test("BFu15i_BFu8c_I");
    static STRUCT_IF_C BFu15i_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_I, BFu15i_BFu8c_I)
//============================================================================


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



static void Test_BFu15i_BFu8c_Ip()
{
  {
    init_simple_test("BFu15i_BFu8c_Ip");
    static STRUCT_IF_C BFu15i_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_Ip, BFu15i_BFu8c_Ip)
//============================================================================


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



static void Test_BFu15i_BFu8c_L()
{
  {
    init_simple_test("BFu15i_BFu8c_L");
    static STRUCT_IF_C BFu15i_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_L, BFu15i_BFu8c_L)
//============================================================================


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



static void Test_BFu15i_BFu8c_S()
{
  {
    init_simple_test("BFu15i_BFu8c_S");
    static STRUCT_IF_C BFu15i_BFu8c_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_S, BFu15i_BFu8c_S)
//============================================================================


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



static void Test_BFu15i_BFu8c_Uc()
{
  {
    init_simple_test("BFu15i_BFu8c_Uc");
    static STRUCT_IF_C BFu15i_BFu8c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_Uc, BFu15i_BFu8c_Uc)
//============================================================================


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



static void Test_BFu15i_BFu8c_Ui()
{
  {
    init_simple_test("BFu15i_BFu8c_Ui");
    static STRUCT_IF_C BFu15i_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_Ui, BFu15i_BFu8c_Ui)
//============================================================================


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



static void Test_BFu15i_BFu8c_Ul()
{
  {
    init_simple_test("BFu15i_BFu8c_Ul");
    static STRUCT_IF_C BFu15i_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_Ul, BFu15i_BFu8c_Ul)
//============================================================================


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



static void Test_BFu15i_BFu8c_Us()
{
  {
    init_simple_test("BFu15i_BFu8c_Us");
    static STRUCT_IF_C BFu15i_BFu8c_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_Us, BFu15i_BFu8c_Us)
//============================================================================


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



static void Test_BFu15i_BFu8c_Vp()
{
  {
    init_simple_test("BFu15i_BFu8c_Vp");
    static STRUCT_IF_C BFu15i_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8c_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8c_Vp, BFu15i_BFu8c_Vp)
//============================================================================


struct  BFu15i_BFu8i  {
  unsigned int v1:15;
  unsigned int v2:8;
};
//SIG(1 BFu15i_BFu8i) C1{ Fi:15 Fi:8}



static void Test_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i, BFu15i_BFu8i)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu15i, BFu15i_BFu8i_BFu15i)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu15i_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu15ll, BFu15i_BFu8i_BFu15ll)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu8i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu15s, BFu15i_BFu8i_BFu15s)
//============================================================================


struct  BFu15i_BFu8i_BFu16i  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu8i_BFu16i) C1{ Fi:15 Fi:8 Fi:16}



static void Test_BFu15i_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu16i, BFu15i_BFu8i_BFu16i)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu15i_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu16ll, BFu15i_BFu8i_BFu16ll)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu8i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu16s, BFu15i_BFu8i_BFu16s)
//============================================================================


struct  BFu15i_BFu8i_BFu17i  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu8i_BFu17i) C1{ Fi:15 Fi:8 Fi:17}



static void Test_BFu15i_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu17i, BFu15i_BFu8i_BFu17i)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu15i_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu17ll, BFu15i_BFu8i_BFu17ll)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu1c, BFu15i_BFu8i_BFu1c)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu1i, BFu15i_BFu8i_BFu1i)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu1ll, BFu15i_BFu8i_BFu1ll)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu1s, BFu15i_BFu8i_BFu1s)
//============================================================================


struct  BFu15i_BFu8i_BFu31i  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu8i_BFu31i) C1{ Fi:15 Fi:8 Fi:31}



static void Test_BFu15i_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu31i, BFu15i_BFu8i_BFu31i)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu15i_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu31ll, BFu15i_BFu8i_BFu31ll)
//============================================================================


struct  BFu15i_BFu8i_BFu32i  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu8i_BFu32i) C1{ Fi:15 Fi:8 Fi:32}



static void Test_BFu15i_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu32i, BFu15i_BFu8i_BFu32i)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu15i_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu32ll, BFu15i_BFu8i_BFu32ll)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu33");
    static STRUCT_IF_C BFu15i_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu15i_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu33, BFu15i_BFu8i_BFu33)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu7c, BFu15i_BFu8i_BFu7c)
//============================================================================


struct  BFu15i_BFu8i_BFu7i  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu8i_BFu7i) C1{ Fi:15 Fi:8 Fi:7}



static void Test_BFu15i_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu7i, BFu15i_BFu8i_BFu7i)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu7ll, BFu15i_BFu8i_BFu7ll)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu7s, BFu15i_BFu8i_BFu7s)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu8c, BFu15i_BFu8i_BFu8c)
//============================================================================


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



static void Test_BFu15i_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu8i, BFu15i_BFu8i_BFu8i)
//============================================================================


struct  BFu15i_BFu8i_BFu8ll  {
  unsigned int v1:15;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu8i_BFu8ll) C1{ Fi:15 Fi:8 FL:8}



static void Test_BFu15i_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu8ll, BFu15i_BFu8i_BFu8ll)
//============================================================================


struct  BFu15i_BFu8i_BFu8s  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu8i_BFu8s) C1{ Fi:15 Fi:8 Fs:8}



static void Test_BFu15i_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu8s, BFu15i_BFu8i_BFu8s)
//============================================================================


struct  BFu15i_BFu8i_BFu9i  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu8i_BFu9i) C1{ Fi:15 Fi:8 Fi:9}



static void Test_BFu15i_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu9i, BFu15i_BFu8i_BFu9i)
//============================================================================


struct  BFu15i_BFu8i_BFu9ll  {
  unsigned int v1:15;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu8i_BFu9ll) C1{ Fi:15 Fi:8 FL:9}



static void Test_BFu15i_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu9ll, BFu15i_BFu8i_BFu9ll)
//============================================================================


struct  BFu15i_BFu8i_BFu9s  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu8i_BFu9s) C1{ Fi:15 Fi:8 Fs:9}



static void Test_BFu15i_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu8i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_BFu9s, BFu15i_BFu8i_BFu9s)
//============================================================================


struct  BFu15i_BFu8i_C  {
  unsigned int v1:15;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu15i_BFu8i_C) C1{ Fi:15 Fi:8 Fc}



static void Test_BFu15i_BFu8i_C()
{
  {
    init_simple_test("BFu15i_BFu8i_C");
    static STRUCT_IF_C BFu15i_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_C");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_C");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_C, BFu15i_BFu8i_C)
//============================================================================


struct  BFu15i_BFu8i_D  {
  unsigned int v1:15;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu15i_BFu8i_D) C1{ Fi:15 Fi:8 FL}



static void Test_BFu15i_BFu8i_D()
{
  {
    init_simple_test("BFu15i_BFu8i_D");
    static STRUCT_IF_C BFu15i_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_D");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_D");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_D, BFu15i_BFu8i_D)
//============================================================================


struct  BFu15i_BFu8i_F  {
  unsigned int v1:15;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu15i_BFu8i_F) C1{ Fi:15 Fi:8 Fi}



static void Test_BFu15i_BFu8i_F()
{
  {
    init_simple_test("BFu15i_BFu8i_F");
    static STRUCT_IF_C BFu15i_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_F");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_F");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_F, BFu15i_BFu8i_F)
//============================================================================


struct  BFu15i_BFu8i_I  {
  unsigned int v1:15;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu15i_BFu8i_I) C1{ Fi:15 Fi:8 Fi}



static void Test_BFu15i_BFu8i_I()
{
  {
    init_simple_test("BFu15i_BFu8i_I");
    static STRUCT_IF_C BFu15i_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_I");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_I");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_I, BFu15i_BFu8i_I)
//============================================================================


struct  BFu15i_BFu8i_Ip  {
  unsigned int v1:15;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu15i_BFu8i_Ip) C1{ Fi:15 Fi:8 Fp}



static void Test_BFu15i_BFu8i_Ip()
{
  {
    init_simple_test("BFu15i_BFu8i_Ip");
    static STRUCT_IF_C BFu15i_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_Ip, BFu15i_BFu8i_Ip)
//============================================================================


struct  BFu15i_BFu8i_L  {
  unsigned int v1:15;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu8i_L) C1{ Fi:15 Fi:8 FL}



static void Test_BFu15i_BFu8i_L()
{
  {
    init_simple_test("BFu15i_BFu8i_L");
    static STRUCT_IF_C BFu15i_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_L");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_L");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_L, BFu15i_BFu8i_L)
//============================================================================


struct  BFu15i_BFu8i_S  {
  unsigned int v1:15;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu15i_BFu8i_S) C1{ Fi:15 Fi:8 Fs}



static void Test_BFu15i_BFu8i_S()
{
  {
    init_simple_test("BFu15i_BFu8i_S");
    static STRUCT_IF_C BFu15i_BFu8i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_S");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_S");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_S, BFu15i_BFu8i_S)
//============================================================================


struct  BFu15i_BFu8i_Uc  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu15i_BFu8i_Uc) C1{ Fi:15 Fi:8 Fc}



static void Test_BFu15i_BFu8i_Uc()
{
  {
    init_simple_test("BFu15i_BFu8i_Uc");
    static STRUCT_IF_C BFu15i_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_Uc, BFu15i_BFu8i_Uc)
//============================================================================


struct  BFu15i_BFu8i_Ui  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu15i_BFu8i_Ui) C1{ Fi:15 Fi:8 Fi}



static void Test_BFu15i_BFu8i_Ui()
{
  {
    init_simple_test("BFu15i_BFu8i_Ui");
    static STRUCT_IF_C BFu15i_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_Ui, BFu15i_BFu8i_Ui)
//============================================================================


struct  BFu15i_BFu8i_Ul  {
  unsigned int v1:15;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu15i_BFu8i_Ul) C1{ Fi:15 Fi:8 FL}



static void Test_BFu15i_BFu8i_Ul()
{
  {
    init_simple_test("BFu15i_BFu8i_Ul");
    static STRUCT_IF_C BFu15i_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_Ul, BFu15i_BFu8i_Ul)
//============================================================================


struct  BFu15i_BFu8i_Us  {
  unsigned int v1:15;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu8i_Us) C1{ Fi:15 Fi:8 Fs}



static void Test_BFu15i_BFu8i_Us()
{
  {
    init_simple_test("BFu15i_BFu8i_Us");
    static STRUCT_IF_C BFu15i_BFu8i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_Us");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_Us");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_Us, BFu15i_BFu8i_Us)
//============================================================================


struct  BFu15i_BFu8i_Vp  {
  unsigned int v1:15;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu15i_BFu8i_Vp) C1{ Fi:15 Fi:8 Fp}



static void Test_BFu15i_BFu8i_Vp()
{
  {
    init_simple_test("BFu15i_BFu8i_Vp");
    static STRUCT_IF_C BFu15i_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8i_Vp, BFu15i_BFu8i_Vp)
//============================================================================


struct  BFu15i_BFu8ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
};
//SIG(1 BFu15i_BFu8ll) C1{ Fi:15 FL:8}



static void Test_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll, BFu15i_BFu8ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu15i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu15i_BFu8ll_BFu15i) C1{ Fi:15 FL:8 Fi:15}



static void Test_BFu15i_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu15i, BFu15i_BFu8ll_BFu15i)
//============================================================================


struct  BFu15i_BFu8ll_BFu15ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFu8ll_BFu15ll) C1{ Fi:15 FL:8 FL:15}



static void Test_BFu15i_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu15i_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu15ll, BFu15i_BFu8ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu8ll_BFu15s) C1{ Fi:15 FL:8 Fs:15}



static void Test_BFu15i_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu15s, BFu15i_BFu8ll_BFu15s)
//============================================================================


struct  BFu15i_BFu8ll_BFu16i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu8ll_BFu16i) C1{ Fi:15 FL:8 Fi:16}



static void Test_BFu15i_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu16i, BFu15i_BFu8ll_BFu16i)
//============================================================================


struct  BFu15i_BFu8ll_BFu16ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu8ll_BFu16ll) C1{ Fi:15 FL:8 FL:16}



static void Test_BFu15i_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu15i_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu15i_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu16ll, BFu15i_BFu8ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu8ll_BFu16s) C1{ Fi:15 FL:8 Fs:16}



static void Test_BFu15i_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu16s, BFu15i_BFu8ll_BFu16s)
//============================================================================


struct  BFu15i_BFu8ll_BFu17i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu8ll_BFu17i) C1{ Fi:15 FL:8 Fi:17}



static void Test_BFu15i_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu17i, BFu15i_BFu8ll_BFu17i)
//============================================================================


struct  BFu15i_BFu8ll_BFu17ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu8ll_BFu17ll) C1{ Fi:15 FL:8 FL:17}



static void Test_BFu15i_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu15i_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu15i_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu17ll, BFu15i_BFu8ll_BFu17ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu1c  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu15i_BFu8ll_BFu1c) C1{ Fi:15 FL:8 Fc:1}



static void Test_BFu15i_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu1c, BFu15i_BFu8ll_BFu1c)
//============================================================================


struct  BFu15i_BFu8ll_BFu1i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu15i_BFu8ll_BFu1i) C1{ Fi:15 FL:8 Fi:1}



static void Test_BFu15i_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu1i, BFu15i_BFu8ll_BFu1i)
//============================================================================


struct  BFu15i_BFu8ll_BFu1ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_BFu8ll_BFu1ll) C1{ Fi:15 FL:8 FL:1}



static void Test_BFu15i_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu1ll, BFu15i_BFu8ll_BFu1ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu1s  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu8ll_BFu1s) C1{ Fi:15 FL:8 Fs:1}



static void Test_BFu15i_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu15i_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu1s, BFu15i_BFu8ll_BFu1s)
//============================================================================


struct  BFu15i_BFu8ll_BFu31i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu8ll_BFu31i) C1{ Fi:15 FL:8 Fi:31}



static void Test_BFu15i_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu31i, BFu15i_BFu8ll_BFu31i)
//============================================================================


struct  BFu15i_BFu8ll_BFu31ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu8ll_BFu31ll) C1{ Fi:15 FL:8 FL:31}



static void Test_BFu15i_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu15i_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu15i_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu31ll, BFu15i_BFu8ll_BFu31ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu32i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu8ll_BFu32i) C1{ Fi:15 FL:8 Fi:32}



static void Test_BFu15i_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu32i, BFu15i_BFu8ll_BFu32i)
//============================================================================


struct  BFu15i_BFu8ll_BFu32ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu8ll_BFu32ll) C1{ Fi:15 FL:8 FL:32}



static void Test_BFu15i_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu15i_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu15i_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu32ll, BFu15i_BFu8ll_BFu32ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu33  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_BFu8ll_BFu33) C1{ Fi:15 FL:8 FL:33}



static void Test_BFu15i_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu15i_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu15i_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu33, BFu15i_BFu8ll_BFu33)
//============================================================================


struct  BFu15i_BFu8ll_BFu7c  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu15i_BFu8ll_BFu7c) C1{ Fi:15 FL:8 Fc:7}



static void Test_BFu15i_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu7c, BFu15i_BFu8ll_BFu7c)
//============================================================================


struct  BFu15i_BFu8ll_BFu7i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu8ll_BFu7i) C1{ Fi:15 FL:8 Fi:7}



static void Test_BFu15i_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu7i, BFu15i_BFu8ll_BFu7i)
//============================================================================


struct  BFu15i_BFu8ll_BFu7ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu8ll_BFu7ll) C1{ Fi:15 FL:8 FL:7}



static void Test_BFu15i_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu7ll, BFu15i_BFu8ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu8ll_BFu7s) C1{ Fi:15 FL:8 Fs:7}



static void Test_BFu15i_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu15i_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu15i_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu7s, BFu15i_BFu8ll_BFu7s)
//============================================================================


struct  BFu15i_BFu8ll_BFu8c  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu15i_BFu8ll_BFu8c) C1{ Fi:15 FL:8 Fc:8}



static void Test_BFu15i_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu8c, BFu15i_BFu8ll_BFu8c)
//============================================================================


struct  BFu15i_BFu8ll_BFu8i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu8ll_BFu8i) C1{ Fi:15 FL:8 Fi:8}



static void Test_BFu15i_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu8i, BFu15i_BFu8ll_BFu8i)
//============================================================================


struct  BFu15i_BFu8ll_BFu8ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu8ll_BFu8ll) C1{ Fi:15 FL:8 FL:8}



static void Test_BFu15i_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu8ll, BFu15i_BFu8ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu8ll_BFu8s) C1{ Fi:15 FL:8 Fs:8}



static void Test_BFu15i_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu15i_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu8s, BFu15i_BFu8ll_BFu8s)
//============================================================================


struct  BFu15i_BFu8ll_BFu9i  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu8ll_BFu9i) C1{ Fi:15 FL:8 Fi:9}



static void Test_BFu15i_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu9i, BFu15i_BFu8ll_BFu9i)
//============================================================================


struct  BFu15i_BFu8ll_BFu9ll  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu8ll_BFu9ll) C1{ Fi:15 FL:8 FL:9}



static void Test_BFu15i_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu9ll, BFu15i_BFu8ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu8ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu8ll_BFu9s) C1{ Fi:15 FL:8 Fs:9}



static void Test_BFu15i_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu15i_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_BFu9s, BFu15i_BFu8ll_BFu9s)
//============================================================================


struct  BFu15i_BFu8ll_C  {
  unsigned int v1:15;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu15i_BFu8ll_C) C1{ Fi:15 FL:8 Fc}



static void Test_BFu15i_BFu8ll_C()
{
  {
    init_simple_test("BFu15i_BFu8ll_C");
    static STRUCT_IF_C BFu15i_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_C");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_C");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_C, BFu15i_BFu8ll_C)
//============================================================================


struct  BFu15i_BFu8ll_D  {
  unsigned int v1:15;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu15i_BFu8ll_D) C1{ Fi:15 FL:8 FL}



static void Test_BFu15i_BFu8ll_D()
{
  {
    init_simple_test("BFu15i_BFu8ll_D");
    static STRUCT_IF_C BFu15i_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_D");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_D");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_D, BFu15i_BFu8ll_D)
//============================================================================


struct  BFu15i_BFu8ll_F  {
  unsigned int v1:15;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu15i_BFu8ll_F) C1{ Fi:15 FL:8 Fi}



static void Test_BFu15i_BFu8ll_F()
{
  {
    init_simple_test("BFu15i_BFu8ll_F");
    static STRUCT_IF_C BFu15i_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_F");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_F");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_F, BFu15i_BFu8ll_F)
//============================================================================


struct  BFu15i_BFu8ll_I  {
  unsigned int v1:15;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu15i_BFu8ll_I) C1{ Fi:15 FL:8 Fi}



static void Test_BFu15i_BFu8ll_I()
{
  {
    init_simple_test("BFu15i_BFu8ll_I");
    static STRUCT_IF_C BFu15i_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_I");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_I");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_I, BFu15i_BFu8ll_I)
//============================================================================


struct  BFu15i_BFu8ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu15i_BFu8ll_Ip) C1{ Fi:15 FL:8 Fp}



static void Test_BFu15i_BFu8ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu8ll_Ip");
    static STRUCT_IF_C BFu15i_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_Ip, BFu15i_BFu8ll_Ip)
//============================================================================


struct  BFu15i_BFu8ll_L  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu8ll_L) C1{ Fi:15 FL:8 FL}



static void Test_BFu15i_BFu8ll_L()
{
  {
    init_simple_test("BFu15i_BFu8ll_L");
    static STRUCT_IF_C BFu15i_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_L");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_L");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_L, BFu15i_BFu8ll_L)
//============================================================================


struct  BFu15i_BFu8ll_S  {
  unsigned int v1:15;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu15i_BFu8ll_S) C1{ Fi:15 FL:8 Fs}



static void Test_BFu15i_BFu8ll_S()
{
  {
    init_simple_test("BFu15i_BFu8ll_S");
    static STRUCT_IF_C BFu15i_BFu8ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_S");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_S");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_S, BFu15i_BFu8ll_S)
//============================================================================


struct  BFu15i_BFu8ll_Uc  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu15i_BFu8ll_Uc) C1{ Fi:15 FL:8 Fc}



static void Test_BFu15i_BFu8ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu8ll_Uc");
    static STRUCT_IF_C BFu15i_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_Uc, BFu15i_BFu8ll_Uc)
//============================================================================


struct  BFu15i_BFu8ll_Ui  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu15i_BFu8ll_Ui) C1{ Fi:15 FL:8 Fi}



static void Test_BFu15i_BFu8ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu8ll_Ui");
    static STRUCT_IF_C BFu15i_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_Ui, BFu15i_BFu8ll_Ui)
//============================================================================


struct  BFu15i_BFu8ll_Ul  {
  unsigned int v1:15;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu15i_BFu8ll_Ul) C1{ Fi:15 FL:8 FL}



static void Test_BFu15i_BFu8ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu8ll_Ul");
    static STRUCT_IF_C BFu15i_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_Ul, BFu15i_BFu8ll_Ul)
//============================================================================


struct  BFu15i_BFu8ll_Us  {
  unsigned int v1:15;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu8ll_Us) C1{ Fi:15 FL:8 Fs}



static void Test_BFu15i_BFu8ll_Us()
{
  {
    init_simple_test("BFu15i_BFu8ll_Us");
    static STRUCT_IF_C BFu15i_BFu8ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_Us, BFu15i_BFu8ll_Us)
//============================================================================


struct  BFu15i_BFu8ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu15i_BFu8ll_Vp) C1{ Fi:15 FL:8 Fp}



static void Test_BFu15i_BFu8ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu8ll_Vp");
    static STRUCT_IF_C BFu15i_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 8, 1, "BFu15i_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 8, hide_ull(1LL<<7), "BFu15i_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8ll_Vp, BFu15i_BFu8ll_Vp)
//============================================================================


struct  BFu15i_BFu8s  {
  unsigned int v1:15;
  unsigned short v2:8;
};
//SIG(1 BFu15i_BFu8s) C1{ Fi:15 Fs:8}



static void Test_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s, BFu15i_BFu8s)
//============================================================================


struct  BFu15i_BFu8s_BFu15i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu15i_BFu8s_BFu15i) C1{ Fi:15 Fs:8 Fi:15}



static void Test_BFu15i_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu15i, BFu15i_BFu8s_BFu15i)
//============================================================================


struct  BFu15i_BFu8s_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFu8s_BFu15ll) C1{ Fi:15 Fs:8 FL:15}



static void Test_BFu15i_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15i_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu15ll, BFu15i_BFu8s_BFu15ll)
//============================================================================


struct  BFu15i_BFu8s_BFu15s  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu8s_BFu15s) C1{ Fi:15 Fs:8 Fs:15}



static void Test_BFu15i_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu8s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu15s, BFu15i_BFu8s_BFu15s)
//============================================================================


struct  BFu15i_BFu8s_BFu16i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu8s_BFu16i) C1{ Fi:15 Fs:8 Fi:16}



static void Test_BFu15i_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu16i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu16i, BFu15i_BFu8s_BFu16i)
//============================================================================


struct  BFu15i_BFu8s_BFu16ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu8s_BFu16ll) C1{ Fi:15 Fs:8 FL:16}



static void Test_BFu15i_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15i_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu16ll, BFu15i_BFu8s_BFu16ll)
//============================================================================


struct  BFu15i_BFu8s_BFu16s  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu8s_BFu16s) C1{ Fi:15 Fs:8 Fs:16}



static void Test_BFu15i_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu16s");
    static STRUCT_IF_C BFu15i_BFu8s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu16s, BFu15i_BFu8s_BFu16s)
//============================================================================


struct  BFu15i_BFu8s_BFu17i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu8s_BFu17i) C1{ Fi:15 Fs:8 Fi:17}



static void Test_BFu15i_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu17i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu17i, BFu15i_BFu8s_BFu17i)
//============================================================================


struct  BFu15i_BFu8s_BFu17ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu8s_BFu17ll) C1{ Fi:15 Fs:8 FL:17}



static void Test_BFu15i_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15i_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu17ll, BFu15i_BFu8s_BFu17ll)
//============================================================================


struct  BFu15i_BFu8s_BFu1c  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu15i_BFu8s_BFu1c) C1{ Fi:15 Fs:8 Fc:1}



static void Test_BFu15i_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu1c");
    static STRUCT_IF_C BFu15i_BFu8s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu1c, BFu15i_BFu8s_BFu1c)
//============================================================================


struct  BFu15i_BFu8s_BFu1i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu15i_BFu8s_BFu1i) C1{ Fi:15 Fs:8 Fi:1}



static void Test_BFu15i_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu1i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu1i, BFu15i_BFu8s_BFu1i)
//============================================================================


struct  BFu15i_BFu8s_BFu1ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_BFu8s_BFu1ll) C1{ Fi:15 Fs:8 FL:1}



static void Test_BFu15i_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu1ll, BFu15i_BFu8s_BFu1ll)
//============================================================================


struct  BFu15i_BFu8s_BFu1s  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu8s_BFu1s) C1{ Fi:15 Fs:8 Fs:1}



static void Test_BFu15i_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu1s");
    static STRUCT_IF_C BFu15i_BFu8s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu1s, BFu15i_BFu8s_BFu1s)
//============================================================================


struct  BFu15i_BFu8s_BFu31i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu8s_BFu31i) C1{ Fi:15 Fs:8 Fi:31}



static void Test_BFu15i_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu31i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu31i, BFu15i_BFu8s_BFu31i)
//============================================================================


struct  BFu15i_BFu8s_BFu31ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu8s_BFu31ll) C1{ Fi:15 Fs:8 FL:31}



static void Test_BFu15i_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15i_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu31ll, BFu15i_BFu8s_BFu31ll)
//============================================================================


struct  BFu15i_BFu8s_BFu32i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu8s_BFu32i) C1{ Fi:15 Fs:8 Fi:32}



static void Test_BFu15i_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu32i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu32i, BFu15i_BFu8s_BFu32i)
//============================================================================


struct  BFu15i_BFu8s_BFu32ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu8s_BFu32ll) C1{ Fi:15 Fs:8 FL:32}



static void Test_BFu15i_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15i_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu32ll, BFu15i_BFu8s_BFu32ll)
//============================================================================


struct  BFu15i_BFu8s_BFu33  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_BFu8s_BFu33) C1{ Fi:15 Fs:8 FL:33}



static void Test_BFu15i_BFu8s_BFu33()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu33");
    static STRUCT_IF_C BFu15i_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15i_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu33, BFu15i_BFu8s_BFu33)
//============================================================================


struct  BFu15i_BFu8s_BFu7c  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu15i_BFu8s_BFu7c) C1{ Fi:15 Fs:8 Fc:7}



static void Test_BFu15i_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu7c");
    static STRUCT_IF_C BFu15i_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu7c, BFu15i_BFu8s_BFu7c)
//============================================================================


struct  BFu15i_BFu8s_BFu7i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu8s_BFu7i) C1{ Fi:15 Fs:8 Fi:7}



static void Test_BFu15i_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu7i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu7i, BFu15i_BFu8s_BFu7i)
//============================================================================


struct  BFu15i_BFu8s_BFu7ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu8s_BFu7ll) C1{ Fi:15 Fs:8 FL:7}



static void Test_BFu15i_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu7ll, BFu15i_BFu8s_BFu7ll)
//============================================================================


struct  BFu15i_BFu8s_BFu7s  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu8s_BFu7s) C1{ Fi:15 Fs:8 Fs:7}



static void Test_BFu15i_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu7s");
    static STRUCT_IF_C BFu15i_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu7s, BFu15i_BFu8s_BFu7s)
//============================================================================


struct  BFu15i_BFu8s_BFu8c  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu15i_BFu8s_BFu8c) C1{ Fi:15 Fs:8 Fc:8}



static void Test_BFu15i_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu8c");
    static STRUCT_IF_C BFu15i_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu8c, BFu15i_BFu8s_BFu8c)
//============================================================================


struct  BFu15i_BFu8s_BFu8i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu8s_BFu8i) C1{ Fi:15 Fs:8 Fi:8}



static void Test_BFu15i_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu8i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu8i, BFu15i_BFu8s_BFu8i)
//============================================================================


struct  BFu15i_BFu8s_BFu8ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu8s_BFu8ll) C1{ Fi:15 Fs:8 FL:8}



static void Test_BFu15i_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu8ll, BFu15i_BFu8s_BFu8ll)
//============================================================================


struct  BFu15i_BFu8s_BFu8s  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu8s_BFu8s) C1{ Fi:15 Fs:8 Fs:8}



static void Test_BFu15i_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu8s");
    static STRUCT_IF_C BFu15i_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu8s, BFu15i_BFu8s_BFu8s)
//============================================================================


struct  BFu15i_BFu8s_BFu9i  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu8s_BFu9i) C1{ Fi:15 Fs:8 Fi:9}



static void Test_BFu15i_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu9i");
    static STRUCT_IF_C BFu15i_BFu8s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu9i, BFu15i_BFu8s_BFu9i)
//============================================================================


struct  BFu15i_BFu8s_BFu9ll  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu8s_BFu9ll) C1{ Fi:15 Fs:8 FL:9}



static void Test_BFu15i_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu8s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15i_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu9ll, BFu15i_BFu8s_BFu9ll)
//============================================================================


struct  BFu15i_BFu8s_BFu9s  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu8s_BFu9s) C1{ Fi:15 Fs:8 Fs:9}



static void Test_BFu15i_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu8s_BFu9s");
    static STRUCT_IF_C BFu15i_BFu8s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_BFu9s, BFu15i_BFu8s_BFu9s)
//============================================================================


struct  BFu15i_BFu8s_C  {
  unsigned int v1:15;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu15i_BFu8s_C) C1{ Fi:15 Fs:8 Fc}



static void Test_BFu15i_BFu8s_C()
{
  {
    init_simple_test("BFu15i_BFu8s_C");
    static STRUCT_IF_C BFu15i_BFu8s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_C");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_C, BFu15i_BFu8s_C)
//============================================================================


struct  BFu15i_BFu8s_D  {
  unsigned int v1:15;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu15i_BFu8s_D) C1{ Fi:15 Fs:8 FL}



static void Test_BFu15i_BFu8s_D()
{
  {
    init_simple_test("BFu15i_BFu8s_D");
    static STRUCT_IF_C BFu15i_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_D");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_D, BFu15i_BFu8s_D)
//============================================================================


struct  BFu15i_BFu8s_F  {
  unsigned int v1:15;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu15i_BFu8s_F) C1{ Fi:15 Fs:8 Fi}



static void Test_BFu15i_BFu8s_F()
{
  {
    init_simple_test("BFu15i_BFu8s_F");
    static STRUCT_IF_C BFu15i_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_F");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_F, BFu15i_BFu8s_F)
//============================================================================


struct  BFu15i_BFu8s_I  {
  unsigned int v1:15;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu15i_BFu8s_I) C1{ Fi:15 Fs:8 Fi}



static void Test_BFu15i_BFu8s_I()
{
  {
    init_simple_test("BFu15i_BFu8s_I");
    static STRUCT_IF_C BFu15i_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_I");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_I, BFu15i_BFu8s_I)
//============================================================================


struct  BFu15i_BFu8s_Ip  {
  unsigned int v1:15;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu15i_BFu8s_Ip) C1{ Fi:15 Fs:8 Fp}



static void Test_BFu15i_BFu8s_Ip()
{
  {
    init_simple_test("BFu15i_BFu8s_Ip");
    static STRUCT_IF_C BFu15i_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_Ip, BFu15i_BFu8s_Ip)
//============================================================================


struct  BFu15i_BFu8s_L  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu8s_L) C1{ Fi:15 Fs:8 FL}



static void Test_BFu15i_BFu8s_L()
{
  {
    init_simple_test("BFu15i_BFu8s_L");
    static STRUCT_IF_C BFu15i_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_L");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_L, BFu15i_BFu8s_L)
//============================================================================


struct  BFu15i_BFu8s_S  {
  unsigned int v1:15;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu15i_BFu8s_S) C1{ Fi:15 Fs:8 Fs}



static void Test_BFu15i_BFu8s_S()
{
  {
    init_simple_test("BFu15i_BFu8s_S");
    static STRUCT_IF_C BFu15i_BFu8s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_S");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_S, BFu15i_BFu8s_S)
//============================================================================


struct  BFu15i_BFu8s_Uc  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu15i_BFu8s_Uc) C1{ Fi:15 Fs:8 Fc}



static void Test_BFu15i_BFu8s_Uc()
{
  {
    init_simple_test("BFu15i_BFu8s_Uc");
    static STRUCT_IF_C BFu15i_BFu8s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu8s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_Uc, BFu15i_BFu8s_Uc)
//============================================================================


struct  BFu15i_BFu8s_Ui  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu15i_BFu8s_Ui) C1{ Fi:15 Fs:8 Fi}



static void Test_BFu15i_BFu8s_Ui()
{
  {
    init_simple_test("BFu15i_BFu8s_Ui");
    static STRUCT_IF_C BFu15i_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_Ui, BFu15i_BFu8s_Ui)
//============================================================================


struct  BFu15i_BFu8s_Ul  {
  unsigned int v1:15;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu15i_BFu8s_Ul) C1{ Fi:15 Fs:8 FL}



static void Test_BFu15i_BFu8s_Ul()
{
  {
    init_simple_test("BFu15i_BFu8s_Ul");
    static STRUCT_IF_C BFu15i_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_Ul, BFu15i_BFu8s_Ul)
//============================================================================


struct  BFu15i_BFu8s_Us  {
  unsigned int v1:15;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu8s_Us) C1{ Fi:15 Fs:8 Fs}



static void Test_BFu15i_BFu8s_Us()
{
  {
    init_simple_test("BFu15i_BFu8s_Us");
    static STRUCT_IF_C BFu15i_BFu8s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu8s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_Us");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_Us, BFu15i_BFu8s_Us)
//============================================================================


struct  BFu15i_BFu8s_Vp  {
  unsigned int v1:15;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu15i_BFu8s_Vp) C1{ Fi:15 Fs:8 Fp}



static void Test_BFu15i_BFu8s_Vp()
{
  {
    init_simple_test("BFu15i_BFu8s_Vp");
    static STRUCT_IF_C BFu15i_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, 1, "BFu15i_BFu8s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu8s_Vp, BFu15i_BFu8s_Vp)
//============================================================================


struct  BFu15i_BFu9i  {
  unsigned int v1:15;
  unsigned int v2:9;
};
//SIG(1 BFu15i_BFu9i) C1{ Fi:15 Fi:9}



static void Test_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i, BFu15i_BFu9i)
//============================================================================


struct  BFu15i_BFu9i_BFu15i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu15i_BFu9i_BFu15i) C1{ Fi:15 Fi:9 Fi:15}



static void Test_BFu15i_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu15i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu15i, BFu15i_BFu9i_BFu15i)
//============================================================================


struct  BFu15i_BFu9i_BFu15ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFu9i_BFu15ll) C1{ Fi:15 Fi:9 FL:15}



static void Test_BFu15i_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15i_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu15ll, BFu15i_BFu9i_BFu15ll)
//============================================================================


struct  BFu15i_BFu9i_BFu15s  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu9i_BFu15s) C1{ Fi:15 Fi:9 Fs:15}



static void Test_BFu15i_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu15s");
    static STRUCT_IF_C BFu15i_BFu9i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu15s, BFu15i_BFu9i_BFu15s)
//============================================================================


struct  BFu15i_BFu9i_BFu16i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu9i_BFu16i) C1{ Fi:15 Fi:9 Fi:16}



static void Test_BFu15i_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu16i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu16i, BFu15i_BFu9i_BFu16i)
//============================================================================


struct  BFu15i_BFu9i_BFu16ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu9i_BFu16ll) C1{ Fi:15 Fi:9 FL:16}



static void Test_BFu15i_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15i_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu16ll, BFu15i_BFu9i_BFu16ll)
//============================================================================


struct  BFu15i_BFu9i_BFu16s  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu9i_BFu16s) C1{ Fi:15 Fi:9 Fs:16}



static void Test_BFu15i_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu16s");
    static STRUCT_IF_C BFu15i_BFu9i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu16s, BFu15i_BFu9i_BFu16s)
//============================================================================


struct  BFu15i_BFu9i_BFu17i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu9i_BFu17i) C1{ Fi:15 Fi:9 Fi:17}



static void Test_BFu15i_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu17i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu17i, BFu15i_BFu9i_BFu17i)
//============================================================================


struct  BFu15i_BFu9i_BFu17ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu9i_BFu17ll) C1{ Fi:15 Fi:9 FL:17}



static void Test_BFu15i_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15i_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu17ll, BFu15i_BFu9i_BFu17ll)
//============================================================================


struct  BFu15i_BFu9i_BFu1c  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu15i_BFu9i_BFu1c) C1{ Fi:15 Fi:9 Fc:1}



static void Test_BFu15i_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu1c");
    static STRUCT_IF_C BFu15i_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu1c, BFu15i_BFu9i_BFu1c)
//============================================================================


struct  BFu15i_BFu9i_BFu1i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu15i_BFu9i_BFu1i) C1{ Fi:15 Fi:9 Fi:1}



static void Test_BFu15i_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu1i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu1i, BFu15i_BFu9i_BFu1i)
//============================================================================


struct  BFu15i_BFu9i_BFu1ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_BFu9i_BFu1ll) C1{ Fi:15 Fi:9 FL:1}



static void Test_BFu15i_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu1ll, BFu15i_BFu9i_BFu1ll)
//============================================================================


struct  BFu15i_BFu9i_BFu1s  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu9i_BFu1s) C1{ Fi:15 Fi:9 Fs:1}



static void Test_BFu15i_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu1s");
    static STRUCT_IF_C BFu15i_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu1s, BFu15i_BFu9i_BFu1s)
//============================================================================


struct  BFu15i_BFu9i_BFu31i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu9i_BFu31i) C1{ Fi:15 Fi:9 Fi:31}



static void Test_BFu15i_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu31i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu31i, BFu15i_BFu9i_BFu31i)
//============================================================================


struct  BFu15i_BFu9i_BFu31ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu9i_BFu31ll) C1{ Fi:15 Fi:9 FL:31}



static void Test_BFu15i_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15i_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu31ll, BFu15i_BFu9i_BFu31ll)
//============================================================================


struct  BFu15i_BFu9i_BFu32i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu9i_BFu32i) C1{ Fi:15 Fi:9 Fi:32}



static void Test_BFu15i_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu32i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu32i, BFu15i_BFu9i_BFu32i)
//============================================================================


struct  BFu15i_BFu9i_BFu32ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu9i_BFu32ll) C1{ Fi:15 Fi:9 FL:32}



static void Test_BFu15i_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15i_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu32ll, BFu15i_BFu9i_BFu32ll)
//============================================================================


struct  BFu15i_BFu9i_BFu33  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_BFu9i_BFu33) C1{ Fi:15 Fi:9 FL:33}



static void Test_BFu15i_BFu9i_BFu33()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu33");
    static STRUCT_IF_C BFu15i_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15i_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu33, BFu15i_BFu9i_BFu33)
//============================================================================


struct  BFu15i_BFu9i_BFu7c  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu15i_BFu9i_BFu7c) C1{ Fi:15 Fi:9 Fc:7}



static void Test_BFu15i_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu7c");
    static STRUCT_IF_C BFu15i_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu7c, BFu15i_BFu9i_BFu7c)
//============================================================================


struct  BFu15i_BFu9i_BFu7i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu9i_BFu7i) C1{ Fi:15 Fi:9 Fi:7}



static void Test_BFu15i_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu7i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu7i, BFu15i_BFu9i_BFu7i)
//============================================================================


struct  BFu15i_BFu9i_BFu7ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu9i_BFu7ll) C1{ Fi:15 Fi:9 FL:7}



static void Test_BFu15i_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu7ll, BFu15i_BFu9i_BFu7ll)
//============================================================================


struct  BFu15i_BFu9i_BFu7s  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu9i_BFu7s) C1{ Fi:15 Fi:9 Fs:7}



static void Test_BFu15i_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu7s");
    static STRUCT_IF_C BFu15i_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu7s, BFu15i_BFu9i_BFu7s)
//============================================================================


struct  BFu15i_BFu9i_BFu8c  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu15i_BFu9i_BFu8c) C1{ Fi:15 Fi:9 Fc:8}



static void Test_BFu15i_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu8c");
    static STRUCT_IF_C BFu15i_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu8c, BFu15i_BFu9i_BFu8c)
//============================================================================


struct  BFu15i_BFu9i_BFu8i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu9i_BFu8i) C1{ Fi:15 Fi:9 Fi:8}



static void Test_BFu15i_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu8i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu8i, BFu15i_BFu9i_BFu8i)
//============================================================================


struct  BFu15i_BFu9i_BFu8ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu9i_BFu8ll) C1{ Fi:15 Fi:9 FL:8}



static void Test_BFu15i_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu8ll, BFu15i_BFu9i_BFu8ll)
//============================================================================


struct  BFu15i_BFu9i_BFu8s  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu9i_BFu8s) C1{ Fi:15 Fi:9 Fs:8}



static void Test_BFu15i_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu8s");
    static STRUCT_IF_C BFu15i_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu8s, BFu15i_BFu9i_BFu8s)
//============================================================================


struct  BFu15i_BFu9i_BFu9i  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu9i_BFu9i) C1{ Fi:15 Fi:9 Fi:9}



static void Test_BFu15i_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu9i");
    static STRUCT_IF_C BFu15i_BFu9i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu9i, BFu15i_BFu9i_BFu9i)
//============================================================================


struct  BFu15i_BFu9i_BFu9ll  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu9i_BFu9ll) C1{ Fi:15 Fi:9 FL:9}



static void Test_BFu15i_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu9i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15i_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu9ll, BFu15i_BFu9i_BFu9ll)
//============================================================================


struct  BFu15i_BFu9i_BFu9s  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu9i_BFu9s) C1{ Fi:15 Fi:9 Fs:9}



static void Test_BFu15i_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu9i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu9i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_BFu9s, BFu15i_BFu9i_BFu9s)
//============================================================================


struct  BFu15i_BFu9i_C  {
  unsigned int v1:15;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu15i_BFu9i_C) C1{ Fi:15 Fi:9 Fc}



static void Test_BFu15i_BFu9i_C()
{
  {
    init_simple_test("BFu15i_BFu9i_C");
    static STRUCT_IF_C BFu15i_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_C");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_C");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_C, BFu15i_BFu9i_C)
//============================================================================


struct  BFu15i_BFu9i_D  {
  unsigned int v1:15;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu15i_BFu9i_D) C1{ Fi:15 Fi:9 FL}



static void Test_BFu15i_BFu9i_D()
{
  {
    init_simple_test("BFu15i_BFu9i_D");
    static STRUCT_IF_C BFu15i_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_D");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_D");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_D, BFu15i_BFu9i_D)
//============================================================================


struct  BFu15i_BFu9i_F  {
  unsigned int v1:15;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu15i_BFu9i_F) C1{ Fi:15 Fi:9 Fi}



static void Test_BFu15i_BFu9i_F()
{
  {
    init_simple_test("BFu15i_BFu9i_F");
    static STRUCT_IF_C BFu15i_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_F");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_F");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_F, BFu15i_BFu9i_F)
//============================================================================


struct  BFu15i_BFu9i_I  {
  unsigned int v1:15;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu15i_BFu9i_I) C1{ Fi:15 Fi:9 Fi}



static void Test_BFu15i_BFu9i_I()
{
  {
    init_simple_test("BFu15i_BFu9i_I");
    static STRUCT_IF_C BFu15i_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_I");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_I");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_I, BFu15i_BFu9i_I)
//============================================================================


struct  BFu15i_BFu9i_Ip  {
  unsigned int v1:15;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu15i_BFu9i_Ip) C1{ Fi:15 Fi:9 Fp}



static void Test_BFu15i_BFu9i_Ip()
{
  {
    init_simple_test("BFu15i_BFu9i_Ip");
    static STRUCT_IF_C BFu15i_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_Ip, BFu15i_BFu9i_Ip)
//============================================================================


struct  BFu15i_BFu9i_L  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu9i_L) C1{ Fi:15 Fi:9 FL}



static void Test_BFu15i_BFu9i_L()
{
  {
    init_simple_test("BFu15i_BFu9i_L");
    static STRUCT_IF_C BFu15i_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_L");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_L");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_L, BFu15i_BFu9i_L)
//============================================================================


struct  BFu15i_BFu9i_S  {
  unsigned int v1:15;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu15i_BFu9i_S) C1{ Fi:15 Fi:9 Fs}



static void Test_BFu15i_BFu9i_S()
{
  {
    init_simple_test("BFu15i_BFu9i_S");
    static STRUCT_IF_C BFu15i_BFu9i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_S");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_S");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_S, BFu15i_BFu9i_S)
//============================================================================


struct  BFu15i_BFu9i_Uc  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu15i_BFu9i_Uc) C1{ Fi:15 Fi:9 Fc}



static void Test_BFu15i_BFu9i_Uc()
{
  {
    init_simple_test("BFu15i_BFu9i_Uc");
    static STRUCT_IF_C BFu15i_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_Uc, BFu15i_BFu9i_Uc)
//============================================================================


struct  BFu15i_BFu9i_Ui  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu15i_BFu9i_Ui) C1{ Fi:15 Fi:9 Fi}



static void Test_BFu15i_BFu9i_Ui()
{
  {
    init_simple_test("BFu15i_BFu9i_Ui");
    static STRUCT_IF_C BFu15i_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_Ui, BFu15i_BFu9i_Ui)
//============================================================================


struct  BFu15i_BFu9i_Ul  {
  unsigned int v1:15;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu15i_BFu9i_Ul) C1{ Fi:15 Fi:9 FL}



static void Test_BFu15i_BFu9i_Ul()
{
  {
    init_simple_test("BFu15i_BFu9i_Ul");
    static STRUCT_IF_C BFu15i_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_Ul, BFu15i_BFu9i_Ul)
//============================================================================


struct  BFu15i_BFu9i_Us  {
  unsigned int v1:15;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu9i_Us) C1{ Fi:15 Fi:9 Fs}



static void Test_BFu15i_BFu9i_Us()
{
  {
    init_simple_test("BFu15i_BFu9i_Us");
    static STRUCT_IF_C BFu15i_BFu9i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_Us");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_Us");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_Us, BFu15i_BFu9i_Us)
//============================================================================


struct  BFu15i_BFu9i_Vp  {
  unsigned int v1:15;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu15i_BFu9i_Vp) C1{ Fi:15 Fi:9 Fp}



static void Test_BFu15i_BFu9i_Vp()
{
  {
    init_simple_test("BFu15i_BFu9i_Vp");
    static STRUCT_IF_C BFu15i_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9i_Vp, BFu15i_BFu9i_Vp)
//============================================================================


struct  BFu15i_BFu9ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
};
//SIG(1 BFu15i_BFu9ll) C1{ Fi:15 FL:9}



static void Test_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll, BFu15i_BFu9ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu15i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu15i_BFu9ll_BFu15i) C1{ Fi:15 FL:9 Fi:15}



static void Test_BFu15i_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu15i, BFu15i_BFu9ll_BFu15i)
//============================================================================


struct  BFu15i_BFu9ll_BFu15ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFu9ll_BFu15ll) C1{ Fi:15 FL:9 FL:15}



static void Test_BFu15i_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15i_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu15ll, BFu15i_BFu9ll_BFu15ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu9ll_BFu15s) C1{ Fi:15 FL:9 Fs:15}



static void Test_BFu15i_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu15s, BFu15i_BFu9ll_BFu15s)
//============================================================================


struct  BFu15i_BFu9ll_BFu16i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu9ll_BFu16i) C1{ Fi:15 FL:9 Fi:16}



static void Test_BFu15i_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu16i, BFu15i_BFu9ll_BFu16i)
//============================================================================


struct  BFu15i_BFu9ll_BFu16ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu9ll_BFu16ll) C1{ Fi:15 FL:9 FL:16}



static void Test_BFu15i_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15i_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu16ll, BFu15i_BFu9ll_BFu16ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu9ll_BFu16s) C1{ Fi:15 FL:9 Fs:16}



static void Test_BFu15i_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu16s, BFu15i_BFu9ll_BFu16s)
//============================================================================


struct  BFu15i_BFu9ll_BFu17i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu9ll_BFu17i) C1{ Fi:15 FL:9 Fi:17}



static void Test_BFu15i_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu17i, BFu15i_BFu9ll_BFu17i)
//============================================================================


struct  BFu15i_BFu9ll_BFu17ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu9ll_BFu17ll) C1{ Fi:15 FL:9 FL:17}



static void Test_BFu15i_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15i_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu17ll, BFu15i_BFu9ll_BFu17ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu1c  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu15i_BFu9ll_BFu1c) C1{ Fi:15 FL:9 Fc:1}



static void Test_BFu15i_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu1c, BFu15i_BFu9ll_BFu1c)
//============================================================================


struct  BFu15i_BFu9ll_BFu1i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu15i_BFu9ll_BFu1i) C1{ Fi:15 FL:9 Fi:1}



static void Test_BFu15i_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu1i, BFu15i_BFu9ll_BFu1i)
//============================================================================


struct  BFu15i_BFu9ll_BFu1ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_BFu9ll_BFu1ll) C1{ Fi:15 FL:9 FL:1}



static void Test_BFu15i_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu1ll, BFu15i_BFu9ll_BFu1ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu1s  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu9ll_BFu1s) C1{ Fi:15 FL:9 Fs:1}



static void Test_BFu15i_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu1s, BFu15i_BFu9ll_BFu1s)
//============================================================================


struct  BFu15i_BFu9ll_BFu31i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu9ll_BFu31i) C1{ Fi:15 FL:9 Fi:31}



static void Test_BFu15i_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu31i, BFu15i_BFu9ll_BFu31i)
//============================================================================


struct  BFu15i_BFu9ll_BFu31ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu9ll_BFu31ll) C1{ Fi:15 FL:9 FL:31}



static void Test_BFu15i_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15i_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu31ll, BFu15i_BFu9ll_BFu31ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu32i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu9ll_BFu32i) C1{ Fi:15 FL:9 Fi:32}



static void Test_BFu15i_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu32i, BFu15i_BFu9ll_BFu32i)
//============================================================================


struct  BFu15i_BFu9ll_BFu32ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu9ll_BFu32ll) C1{ Fi:15 FL:9 FL:32}



static void Test_BFu15i_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15i_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu32ll, BFu15i_BFu9ll_BFu32ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu33  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_BFu9ll_BFu33) C1{ Fi:15 FL:9 FL:33}



static void Test_BFu15i_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu33");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15i_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15i_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu33, BFu15i_BFu9ll_BFu33)
//============================================================================


struct  BFu15i_BFu9ll_BFu7c  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu15i_BFu9ll_BFu7c) C1{ Fi:15 FL:9 Fc:7}



static void Test_BFu15i_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu7c, BFu15i_BFu9ll_BFu7c)
//============================================================================


struct  BFu15i_BFu9ll_BFu7i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu9ll_BFu7i) C1{ Fi:15 FL:9 Fi:7}



static void Test_BFu15i_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu7i, BFu15i_BFu9ll_BFu7i)
//============================================================================


struct  BFu15i_BFu9ll_BFu7ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu9ll_BFu7ll) C1{ Fi:15 FL:9 FL:7}



static void Test_BFu15i_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu7ll, BFu15i_BFu9ll_BFu7ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu9ll_BFu7s) C1{ Fi:15 FL:9 Fs:7}



static void Test_BFu15i_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu7s, BFu15i_BFu9ll_BFu7s)
//============================================================================


struct  BFu15i_BFu9ll_BFu8c  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu15i_BFu9ll_BFu8c) C1{ Fi:15 FL:9 Fc:8}



static void Test_BFu15i_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu8c, BFu15i_BFu9ll_BFu8c)
//============================================================================


struct  BFu15i_BFu9ll_BFu8i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu9ll_BFu8i) C1{ Fi:15 FL:9 Fi:8}



static void Test_BFu15i_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu8i, BFu15i_BFu9ll_BFu8i)
//============================================================================


struct  BFu15i_BFu9ll_BFu8ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu9ll_BFu8ll) C1{ Fi:15 FL:9 FL:8}



static void Test_BFu15i_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu8ll, BFu15i_BFu9ll_BFu8ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu9ll_BFu8s) C1{ Fi:15 FL:9 Fs:8}



static void Test_BFu15i_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu8s, BFu15i_BFu9ll_BFu8s)
//============================================================================


struct  BFu15i_BFu9ll_BFu9i  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu9ll_BFu9i) C1{ Fi:15 FL:9 Fi:9}



static void Test_BFu15i_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu9i, BFu15i_BFu9ll_BFu9i)
//============================================================================


struct  BFu15i_BFu9ll_BFu9ll  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu9ll_BFu9ll) C1{ Fi:15 FL:9 FL:9}



static void Test_BFu15i_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15i_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu9ll, BFu15i_BFu9ll_BFu9ll)
//============================================================================


struct  BFu15i_BFu9ll_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu9ll_BFu9s) C1{ Fi:15 FL:9 Fs:9}



static void Test_BFu15i_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu15i_BFu9ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_BFu9s, BFu15i_BFu9ll_BFu9s)
//============================================================================


struct  BFu15i_BFu9ll_C  {
  unsigned int v1:15;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu15i_BFu9ll_C) C1{ Fi:15 FL:9 Fc}



static void Test_BFu15i_BFu9ll_C()
{
  {
    init_simple_test("BFu15i_BFu9ll_C");
    static STRUCT_IF_C BFu15i_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_C");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_C");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_C");
    check_field_offset(lv, v3, 3, "BFu15i_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_C, BFu15i_BFu9ll_C)
//============================================================================


struct  BFu15i_BFu9ll_D  {
  unsigned int v1:15;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu15i_BFu9ll_D) C1{ Fi:15 FL:9 FL}



static void Test_BFu15i_BFu9ll_D()
{
  {
    init_simple_test("BFu15i_BFu9ll_D");
    static STRUCT_IF_C BFu15i_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_D");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_D");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_D, BFu15i_BFu9ll_D)
//============================================================================


struct  BFu15i_BFu9ll_F  {
  unsigned int v1:15;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu15i_BFu9ll_F) C1{ Fi:15 FL:9 Fi}



static void Test_BFu15i_BFu9ll_F()
{
  {
    init_simple_test("BFu15i_BFu9ll_F");
    static STRUCT_IF_C BFu15i_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_F");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_F");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_F, BFu15i_BFu9ll_F)
//============================================================================


struct  BFu15i_BFu9ll_I  {
  unsigned int v1:15;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu15i_BFu9ll_I) C1{ Fi:15 FL:9 Fi}



static void Test_BFu15i_BFu9ll_I()
{
  {
    init_simple_test("BFu15i_BFu9ll_I");
    static STRUCT_IF_C BFu15i_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_I");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_I");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_I, BFu15i_BFu9ll_I)
//============================================================================


struct  BFu15i_BFu9ll_Ip  {
  unsigned int v1:15;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu15i_BFu9ll_Ip) C1{ Fi:15 FL:9 Fp}



static void Test_BFu15i_BFu9ll_Ip()
{
  {
    init_simple_test("BFu15i_BFu9ll_Ip");
    static STRUCT_IF_C BFu15i_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_Ip, BFu15i_BFu9ll_Ip)
//============================================================================


struct  BFu15i_BFu9ll_L  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu9ll_L) C1{ Fi:15 FL:9 FL}



static void Test_BFu15i_BFu9ll_L()
{
  {
    init_simple_test("BFu15i_BFu9ll_L");
    static STRUCT_IF_C BFu15i_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_L");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_L");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_L, BFu15i_BFu9ll_L)
//============================================================================


struct  BFu15i_BFu9ll_S  {
  unsigned int v1:15;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu15i_BFu9ll_S) C1{ Fi:15 FL:9 Fs}



static void Test_BFu15i_BFu9ll_S()
{
  {
    init_simple_test("BFu15i_BFu9ll_S");
    static STRUCT_IF_C BFu15i_BFu9ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_S");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_S");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_S, BFu15i_BFu9ll_S)
//============================================================================


struct  BFu15i_BFu9ll_Uc  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu15i_BFu9ll_Uc) C1{ Fi:15 FL:9 Fc}



static void Test_BFu15i_BFu9ll_Uc()
{
  {
    init_simple_test("BFu15i_BFu9ll_Uc");
    static STRUCT_IF_C BFu15i_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_Uc");
    check_field_offset(lv, v3, 3, "BFu15i_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_Uc, BFu15i_BFu9ll_Uc)
//============================================================================


struct  BFu15i_BFu9ll_Ui  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu15i_BFu9ll_Ui) C1{ Fi:15 FL:9 Fi}



static void Test_BFu15i_BFu9ll_Ui()
{
  {
    init_simple_test("BFu15i_BFu9ll_Ui");
    static STRUCT_IF_C BFu15i_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_Ui, BFu15i_BFu9ll_Ui)
//============================================================================


struct  BFu15i_BFu9ll_Ul  {
  unsigned int v1:15;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu15i_BFu9ll_Ul) C1{ Fi:15 FL:9 FL}



static void Test_BFu15i_BFu9ll_Ul()
{
  {
    init_simple_test("BFu15i_BFu9ll_Ul");
    static STRUCT_IF_C BFu15i_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_Ul, BFu15i_BFu9ll_Ul)
//============================================================================


struct  BFu15i_BFu9ll_Us  {
  unsigned int v1:15;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu9ll_Us) C1{ Fi:15 FL:9 Fs}



static void Test_BFu15i_BFu9ll_Us()
{
  {
    init_simple_test("BFu15i_BFu9ll_Us");
    static STRUCT_IF_C BFu15i_BFu9ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_Us");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_Us, BFu15i_BFu9ll_Us)
//============================================================================


struct  BFu15i_BFu9ll_Vp  {
  unsigned int v1:15;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu15i_BFu9ll_Vp) C1{ Fi:15 FL:9 Fp}



static void Test_BFu15i_BFu9ll_Vp()
{
  {
    init_simple_test("BFu15i_BFu9ll_Vp");
    static STRUCT_IF_C BFu15i_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 9, 1, "BFu15i_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 1, 7, 9, hide_ull(1LL<<8), "BFu15i_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9ll_Vp, BFu15i_BFu9ll_Vp)
//============================================================================


struct  BFu15i_BFu9s  {
  unsigned int v1:15;
  unsigned short v2:9;
};
//SIG(1 BFu15i_BFu9s) C1{ Fi:15 Fs:9}



static void Test_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu9s");
    static STRUCT_IF_C BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s, BFu15i_BFu9s)
//============================================================================


struct  BFu15i_BFu9s_BFu15i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu15i_BFu9s_BFu15i) C1{ Fi:15 Fs:9 Fi:15}



static void Test_BFu15i_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu15i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu15i, BFu15i_BFu9s_BFu15i)
//============================================================================


struct  BFu15i_BFu9s_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_BFu9s_BFu15ll) C1{ Fi:15 Fs:9 FL:15}



static void Test_BFu15i_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, 1, "BFu15i_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 1, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu15ll, BFu15i_BFu9s_BFu15ll)
//============================================================================


struct  BFu15i_BFu9s_BFu15s  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu15i_BFu9s_BFu15s) C1{ Fi:15 Fs:9 Fs:15}



static void Test_BFu15i_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu15s");
    static STRUCT_IF_C BFu15i_BFu9s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu15s, BFu15i_BFu9s_BFu15s)
//============================================================================


struct  BFu15i_BFu9s_BFu16i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu15i_BFu9s_BFu16i) C1{ Fi:15 Fs:9 Fi:16}



static void Test_BFu15i_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu16i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu16i, BFu15i_BFu9s_BFu16i)
//============================================================================


struct  BFu15i_BFu9s_BFu16ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_BFu9s_BFu16ll) C1{ Fi:15 Fs:9 FL:16}



static void Test_BFu15i_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, 1, "BFu15i_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 1, 16, hide_ull(1LL<<15), "BFu15i_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu16ll, BFu15i_BFu9s_BFu16ll)
//============================================================================


struct  BFu15i_BFu9s_BFu16s  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu15i_BFu9s_BFu16s) C1{ Fi:15 Fs:9 Fs:16}



static void Test_BFu15i_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu16s");
    static STRUCT_IF_C BFu15i_BFu9s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu16s, BFu15i_BFu9s_BFu16s)
//============================================================================


struct  BFu15i_BFu9s_BFu17i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu15i_BFu9s_BFu17i) C1{ Fi:15 Fs:9 Fi:17}



static void Test_BFu15i_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu17i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu17i, BFu15i_BFu9s_BFu17i)
//============================================================================


struct  BFu15i_BFu9s_BFu17ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_BFu9s_BFu17ll) C1{ Fi:15 Fs:9 FL:17}



static void Test_BFu15i_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, 1, "BFu15i_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 1, 17, hide_ull(1LL<<16), "BFu15i_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu17ll, BFu15i_BFu9s_BFu17ll)
//============================================================================


struct  BFu15i_BFu9s_BFu1c  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu15i_BFu9s_BFu1c) C1{ Fi:15 Fs:9 Fc:1}



static void Test_BFu15i_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu1c");
    static STRUCT_IF_C BFu15i_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu15i_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu1c, BFu15i_BFu9s_BFu1c)
//============================================================================


struct  BFu15i_BFu9s_BFu1i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu15i_BFu9s_BFu1i) C1{ Fi:15 Fs:9 Fi:1}



static void Test_BFu15i_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu1i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu15i_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu1i, BFu15i_BFu9s_BFu1i)
//============================================================================


struct  BFu15i_BFu9s_BFu1ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_BFu9s_BFu1ll) C1{ Fi:15 Fs:9 FL:1}



static void Test_BFu15i_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu15i_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu1ll, BFu15i_BFu9s_BFu1ll)
//============================================================================


struct  BFu15i_BFu9s_BFu1s  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu15i_BFu9s_BFu1s) C1{ Fi:15 Fs:9 Fs:1}



static void Test_BFu15i_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu1s");
    static STRUCT_IF_C BFu15i_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 3, 1, 1, 1, "BFu15i_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu1s, BFu15i_BFu9s_BFu1s)
//============================================================================


struct  BFu15i_BFu9s_BFu31i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu15i_BFu9s_BFu31i) C1{ Fi:15 Fs:9 Fi:31}



static void Test_BFu15i_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu31i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu31i, BFu15i_BFu9s_BFu31i)
//============================================================================


struct  BFu15i_BFu9s_BFu31ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_BFu9s_BFu31ll) C1{ Fi:15 Fs:9 FL:31}



static void Test_BFu15i_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, 1, "BFu15i_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 1, 31, hide_ull(1LL<<30), "BFu15i_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu31ll, BFu15i_BFu9s_BFu31ll)
//============================================================================


struct  BFu15i_BFu9s_BFu32i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu15i_BFu9s_BFu32i) C1{ Fi:15 Fs:9 Fi:32}



static void Test_BFu15i_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu32i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu32i, BFu15i_BFu9s_BFu32i)
//============================================================================


struct  BFu15i_BFu9s_BFu32ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_BFu9s_BFu32ll) C1{ Fi:15 Fs:9 FL:32}



static void Test_BFu15i_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, 1, "BFu15i_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 1, 32, hide_ull(1LL<<31), "BFu15i_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu32ll, BFu15i_BFu9s_BFu32ll)
//============================================================================


struct  BFu15i_BFu9s_BFu33  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_BFu9s_BFu33) C1{ Fi:15 Fs:9 FL:33}



static void Test_BFu15i_BFu9s_BFu33()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu33");
    static STRUCT_IF_C BFu15i_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, 1, "BFu15i_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 3, 1, 33, hide_ull(1LL<<32), "BFu15i_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu33, BFu15i_BFu9s_BFu33)
//============================================================================


struct  BFu15i_BFu9s_BFu7c  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu15i_BFu9s_BFu7c) C1{ Fi:15 Fs:9 Fc:7}



static void Test_BFu15i_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu7c");
    static STRUCT_IF_C BFu15i_BFu9s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu15i_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu15i_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu7c, BFu15i_BFu9s_BFu7c)
//============================================================================


struct  BFu15i_BFu9s_BFu7i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu15i_BFu9s_BFu7i) C1{ Fi:15 Fs:9 Fi:7}



static void Test_BFu15i_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu7i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu15i_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu15i_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu7i, BFu15i_BFu9s_BFu7i)
//============================================================================


struct  BFu15i_BFu9s_BFu7ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_BFu9s_BFu7ll) C1{ Fi:15 Fs:9 FL:7}



static void Test_BFu15i_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu15i_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu15i_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu7ll, BFu15i_BFu9s_BFu7ll)
//============================================================================


struct  BFu15i_BFu9s_BFu7s  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu15i_BFu9s_BFu7s) C1{ Fi:15 Fs:9 Fs:7}



static void Test_BFu15i_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu7s");
    static STRUCT_IF_C BFu15i_BFu9s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_BFu9s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, 1, "BFu15i_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 3, 1, 7, hide_ull(1LL<<6), "BFu15i_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu7s, BFu15i_BFu9s_BFu7s)
//============================================================================


struct  BFu15i_BFu9s_BFu8c  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu15i_BFu9s_BFu8c) C1{ Fi:15 Fs:9 Fc:8}



static void Test_BFu15i_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu8c");
    static STRUCT_IF_C BFu15i_BFu9s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu8c, BFu15i_BFu9s_BFu8c)
//============================================================================


struct  BFu15i_BFu9s_BFu8i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu15i_BFu9s_BFu8i) C1{ Fi:15 Fs:9 Fi:8}



static void Test_BFu15i_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu8i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu8i, BFu15i_BFu9s_BFu8i)
//============================================================================


struct  BFu15i_BFu9s_BFu8ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_BFu9s_BFu8ll) C1{ Fi:15 Fs:9 FL:8}



static void Test_BFu15i_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, 1, "BFu15i_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 1, 8, hide_ull(1LL<<7), "BFu15i_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu8ll, BFu15i_BFu9s_BFu8ll)
//============================================================================


struct  BFu15i_BFu9s_BFu8s  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu15i_BFu9s_BFu8s) C1{ Fi:15 Fs:9 Fs:8}



static void Test_BFu15i_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu8s");
    static STRUCT_IF_C BFu15i_BFu9s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu8s, BFu15i_BFu9s_BFu8s)
//============================================================================


struct  BFu15i_BFu9s_BFu9i  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu15i_BFu9s_BFu9i) C1{ Fi:15 Fs:9 Fi:9}



static void Test_BFu15i_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu9i");
    static STRUCT_IF_C BFu15i_BFu9s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu9i, BFu15i_BFu9s_BFu9i)
//============================================================================


struct  BFu15i_BFu9s_BFu9ll  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_BFu9s_BFu9ll) C1{ Fi:15 Fs:9 FL:9}



static void Test_BFu15i_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu15i_BFu9s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, 1, "BFu15i_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 1, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu9ll, BFu15i_BFu9s_BFu9ll)
//============================================================================


struct  BFu15i_BFu9s_BFu9s  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu15i_BFu9s_BFu9s) C1{ Fi:15 Fs:9 Fs:9}



static void Test_BFu15i_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu15i_BFu9s_BFu9s");
    static STRUCT_IF_C BFu15i_BFu9s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_BFu9s, BFu15i_BFu9s_BFu9s)
//============================================================================


struct  BFu15i_BFu9s_C  {
  unsigned int v1:15;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu15i_BFu9s_C) C1{ Fi:15 Fs:9 Fc}



static void Test_BFu15i_BFu9s_C()
{
  {
    init_simple_test("BFu15i_BFu9s_C");
    static STRUCT_IF_C BFu15i_BFu9s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_C");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_C");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_C, BFu15i_BFu9s_C)
//============================================================================


struct  BFu15i_BFu9s_D  {
  unsigned int v1:15;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu15i_BFu9s_D) C1{ Fi:15 Fs:9 FL}



static void Test_BFu15i_BFu9s_D()
{
  {
    init_simple_test("BFu15i_BFu9s_D");
    static STRUCT_IF_C BFu15i_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_D");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_D, BFu15i_BFu9s_D)
//============================================================================


struct  BFu15i_BFu9s_F  {
  unsigned int v1:15;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu15i_BFu9s_F) C1{ Fi:15 Fs:9 Fi}



static void Test_BFu15i_BFu9s_F()
{
  {
    init_simple_test("BFu15i_BFu9s_F");
    static STRUCT_IF_C BFu15i_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_F");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_F, BFu15i_BFu9s_F)
//============================================================================


struct  BFu15i_BFu9s_I  {
  unsigned int v1:15;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu15i_BFu9s_I) C1{ Fi:15 Fs:9 Fi}



static void Test_BFu15i_BFu9s_I()
{
  {
    init_simple_test("BFu15i_BFu9s_I");
    static STRUCT_IF_C BFu15i_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_I");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_I, BFu15i_BFu9s_I)
//============================================================================


struct  BFu15i_BFu9s_Ip  {
  unsigned int v1:15;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu15i_BFu9s_Ip) C1{ Fi:15 Fs:9 Fp}



static void Test_BFu15i_BFu9s_Ip()
{
  {
    init_simple_test("BFu15i_BFu9s_Ip");
    static STRUCT_IF_C BFu15i_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_Ip, BFu15i_BFu9s_Ip)
//============================================================================


struct  BFu15i_BFu9s_L  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu15i_BFu9s_L) C1{ Fi:15 Fs:9 FL}



static void Test_BFu15i_BFu9s_L()
{
  {
    init_simple_test("BFu15i_BFu9s_L");
    static STRUCT_IF_C BFu15i_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_L");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_L, BFu15i_BFu9s_L)
//============================================================================


struct  BFu15i_BFu9s_S  {
  unsigned int v1:15;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu15i_BFu9s_S) C1{ Fi:15 Fs:9 Fs}



static void Test_BFu15i_BFu9s_S()
{
  {
    init_simple_test("BFu15i_BFu9s_S");
    static STRUCT_IF_C BFu15i_BFu9s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_S");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_S");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_S, BFu15i_BFu9s_S)
//============================================================================


struct  BFu15i_BFu9s_Uc  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu15i_BFu9s_Uc) C1{ Fi:15 Fs:9 Fc}



static void Test_BFu15i_BFu9s_Uc()
{
  {
    init_simple_test("BFu15i_BFu9s_Uc");
    static STRUCT_IF_C BFu15i_BFu9s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_Uc");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_Uc, BFu15i_BFu9s_Uc)
//============================================================================


struct  BFu15i_BFu9s_Ui  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu15i_BFu9s_Ui) C1{ Fi:15 Fs:9 Fi}



static void Test_BFu15i_BFu9s_Ui()
{
  {
    init_simple_test("BFu15i_BFu9s_Ui");
    static STRUCT_IF_C BFu15i_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_Ui, BFu15i_BFu9s_Ui)
//============================================================================


struct  BFu15i_BFu9s_Ul  {
  unsigned int v1:15;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu15i_BFu9s_Ul) C1{ Fi:15 Fs:9 FL}



static void Test_BFu15i_BFu9s_Ul()
{
  {
    init_simple_test("BFu15i_BFu9s_Ul");
    static STRUCT_IF_C BFu15i_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_Ul, BFu15i_BFu9s_Ul)
//============================================================================


struct  BFu15i_BFu9s_Us  {
  unsigned int v1:15;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu15i_BFu9s_Us) C1{ Fi:15 Fs:9 Fs}



static void Test_BFu15i_BFu9s_Us()
{
  {
    init_simple_test("BFu15i_BFu9s_Us");
    static STRUCT_IF_C BFu15i_BFu9s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_BFu9s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_Us");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_Us");
    check_field_offset(lv, v3, 4, "BFu15i_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_Us, BFu15i_BFu9s_Us)
//============================================================================


struct  BFu15i_BFu9s_Vp  {
  unsigned int v1:15;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu15i_BFu9s_Vp) C1{ Fi:15 Fs:9 Fp}



static void Test_BFu15i_BFu9s_Vp()
{
  {
    init_simple_test("BFu15i_BFu9s_Vp");
    static STRUCT_IF_C BFu15i_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, 1, "BFu15i_BFu9s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 9, hide_ull(1LL<<8), "BFu15i_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_BFu9s_Vp, BFu15i_BFu9s_Vp)
//============================================================================


struct  BFu15i_C  {
  unsigned int v1:15;
  char v2;
};
//SIG(1 BFu15i_C) C1{ Fi:15 Fc}



static void Test_BFu15i_C()
{
  {
    init_simple_test("BFu15i_C");
    static STRUCT_IF_C BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C");
    check_field_offset(lv, v2, 2, "BFu15i_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C, BFu15i_C)
//============================================================================


struct  BFu15i_C_BFu15i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_C_BFu15i) C1{ Fi:15 Fc Fi:15}



static void Test_BFu15i_C_BFu15i()
{
  {
    init_simple_test("BFu15i_C_BFu15i");
    static STRUCT_IF_C BFu15i_C_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu15i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_C_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu15i, BFu15i_C_BFu15i)
//============================================================================


struct  BFu15i_C_BFu15ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_C_BFu15ll) C1{ Fi:15 Fc FL:15}



static void Test_BFu15i_C_BFu15ll()
{
  {
    init_simple_test("BFu15i_C_BFu15ll");
    static STRUCT_IF_C BFu15i_C_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15i_C_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu15ll, BFu15i_C_BFu15ll)
//============================================================================


struct  BFu15i_C_BFu15s  {
  unsigned int v1:15;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_C_BFu15s) C1{ Fi:15 Fc Fs:15}



static void Test_BFu15i_C_BFu15s()
{
  {
    init_simple_test("BFu15i_C_BFu15s");
    static STRUCT_IF_C BFu15i_C_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu15s");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_C_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu15s, BFu15i_C_BFu15s)
//============================================================================


struct  BFu15i_C_BFu16i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_C_BFu16i) C1{ Fi:15 Fc Fi:16}



static void Test_BFu15i_C_BFu16i()
{
  {
    init_simple_test("BFu15i_C_BFu16i");
    static STRUCT_IF_C BFu15i_C_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu16i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_C_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu16i, BFu15i_C_BFu16i)
//============================================================================


struct  BFu15i_C_BFu16ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_C_BFu16ll) C1{ Fi:15 Fc FL:16}



static void Test_BFu15i_C_BFu16ll()
{
  {
    init_simple_test("BFu15i_C_BFu16ll");
    static STRUCT_IF_C BFu15i_C_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15i_C_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15i_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu16ll, BFu15i_C_BFu16ll)
//============================================================================


struct  BFu15i_C_BFu16s  {
  unsigned int v1:15;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_C_BFu16s) C1{ Fi:15 Fc Fs:16}



static void Test_BFu15i_C_BFu16s()
{
  {
    init_simple_test("BFu15i_C_BFu16s");
    static STRUCT_IF_C BFu15i_C_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu16s");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_C_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu16s, BFu15i_C_BFu16s)
//============================================================================


struct  BFu15i_C_BFu17i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_C_BFu17i) C1{ Fi:15 Fc Fi:17}



static void Test_BFu15i_C_BFu17i()
{
  {
    init_simple_test("BFu15i_C_BFu17i");
    static STRUCT_IF_C BFu15i_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu17i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu17i, BFu15i_C_BFu17i)
//============================================================================


struct  BFu15i_C_BFu17ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_C_BFu17ll) C1{ Fi:15 Fc FL:17}



static void Test_BFu15i_C_BFu17ll()
{
  {
    init_simple_test("BFu15i_C_BFu17ll");
    static STRUCT_IF_C BFu15i_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15i_C_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15i_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu17ll, BFu15i_C_BFu17ll)
//============================================================================


struct  BFu15i_C_BFu1c  {
  unsigned int v1:15;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_C_BFu1c) C1{ Fi:15 Fc Fc:1}



static void Test_BFu15i_C_BFu1c()
{
  {
    init_simple_test("BFu15i_C_BFu1c");
    static STRUCT_IF_C BFu15i_C_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu1c");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu1c, BFu15i_C_BFu1c)
//============================================================================


struct  BFu15i_C_BFu1i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_C_BFu1i) C1{ Fi:15 Fc Fi:1}



static void Test_BFu15i_C_BFu1i()
{
  {
    init_simple_test("BFu15i_C_BFu1i");
    static STRUCT_IF_C BFu15i_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu1i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu1i, BFu15i_C_BFu1i)
//============================================================================


struct  BFu15i_C_BFu1ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_C_BFu1ll) C1{ Fi:15 Fc FL:1}



static void Test_BFu15i_C_BFu1ll()
{
  {
    init_simple_test("BFu15i_C_BFu1ll");
    static STRUCT_IF_C BFu15i_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu1ll, BFu15i_C_BFu1ll)
//============================================================================


struct  BFu15i_C_BFu1s  {
  unsigned int v1:15;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_C_BFu1s) C1{ Fi:15 Fc Fs:1}



static void Test_BFu15i_C_BFu1s()
{
  {
    init_simple_test("BFu15i_C_BFu1s");
    static STRUCT_IF_C BFu15i_C_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu1s");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu1s, BFu15i_C_BFu1s)
//============================================================================


struct  BFu15i_C_BFu31i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_C_BFu31i) C1{ Fi:15 Fc Fi:31}



static void Test_BFu15i_C_BFu31i()
{
  {
    init_simple_test("BFu15i_C_BFu31i");
    static STRUCT_IF_C BFu15i_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu31i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu31i, BFu15i_C_BFu31i)
//============================================================================


struct  BFu15i_C_BFu31ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_C_BFu31ll) C1{ Fi:15 Fc FL:31}



static void Test_BFu15i_C_BFu31ll()
{
  {
    init_simple_test("BFu15i_C_BFu31ll");
    static STRUCT_IF_C BFu15i_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15i_C_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15i_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu31ll, BFu15i_C_BFu31ll)
//============================================================================


struct  BFu15i_C_BFu32i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_C_BFu32i) C1{ Fi:15 Fc Fi:32}



static void Test_BFu15i_C_BFu32i()
{
  {
    init_simple_test("BFu15i_C_BFu32i");
    static STRUCT_IF_C BFu15i_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu32i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu32i, BFu15i_C_BFu32i)
//============================================================================


struct  BFu15i_C_BFu32ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_C_BFu32ll) C1{ Fi:15 Fc FL:32}



static void Test_BFu15i_C_BFu32ll()
{
  {
    init_simple_test("BFu15i_C_BFu32ll");
    static STRUCT_IF_C BFu15i_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15i_C_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15i_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu32ll, BFu15i_C_BFu32ll)
//============================================================================


struct  BFu15i_C_BFu33  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_C_BFu33) C1{ Fi:15 Fc FL:33}



static void Test_BFu15i_C_BFu33()
{
  {
    init_simple_test("BFu15i_C_BFu33");
    static STRUCT_IF_C BFu15i_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu33");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15i_C_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15i_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu33, BFu15i_C_BFu33)
//============================================================================


struct  BFu15i_C_BFu7c  {
  unsigned int v1:15;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_C_BFu7c) C1{ Fi:15 Fc Fc:7}



static void Test_BFu15i_C_BFu7c()
{
  {
    init_simple_test("BFu15i_C_BFu7c");
    static STRUCT_IF_C BFu15i_C_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu7c");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_C_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu7c, BFu15i_C_BFu7c)
//============================================================================


struct  BFu15i_C_BFu7i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_C_BFu7i) C1{ Fi:15 Fc Fi:7}



static void Test_BFu15i_C_BFu7i()
{
  {
    init_simple_test("BFu15i_C_BFu7i");
    static STRUCT_IF_C BFu15i_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu7i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_C_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu7i, BFu15i_C_BFu7i)
//============================================================================


struct  BFu15i_C_BFu7ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_C_BFu7ll) C1{ Fi:15 Fc FL:7}



static void Test_BFu15i_C_BFu7ll()
{
  {
    init_simple_test("BFu15i_C_BFu7ll");
    static STRUCT_IF_C BFu15i_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_C_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu7ll, BFu15i_C_BFu7ll)
//============================================================================


struct  BFu15i_C_BFu7s  {
  unsigned int v1:15;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_C_BFu7s) C1{ Fi:15 Fc Fs:7}



static void Test_BFu15i_C_BFu7s()
{
  {
    init_simple_test("BFu15i_C_BFu7s");
    static STRUCT_IF_C BFu15i_C_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu7s");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_C_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu7s, BFu15i_C_BFu7s)
//============================================================================


struct  BFu15i_C_BFu8c  {
  unsigned int v1:15;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_C_BFu8c) C1{ Fi:15 Fc Fc:8}



static void Test_BFu15i_C_BFu8c()
{
  {
    init_simple_test("BFu15i_C_BFu8c");
    static STRUCT_IF_C BFu15i_C_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu8c");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_C_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu8c, BFu15i_C_BFu8c)
//============================================================================


struct  BFu15i_C_BFu8i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_C_BFu8i) C1{ Fi:15 Fc Fi:8}



static void Test_BFu15i_C_BFu8i()
{
  {
    init_simple_test("BFu15i_C_BFu8i");
    static STRUCT_IF_C BFu15i_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu8i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_C_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu8i, BFu15i_C_BFu8i)
//============================================================================


struct  BFu15i_C_BFu8ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_C_BFu8ll) C1{ Fi:15 Fc FL:8}



static void Test_BFu15i_C_BFu8ll()
{
  {
    init_simple_test("BFu15i_C_BFu8ll");
    static STRUCT_IF_C BFu15i_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_C_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu8ll, BFu15i_C_BFu8ll)
//============================================================================


struct  BFu15i_C_BFu8s  {
  unsigned int v1:15;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_C_BFu8s) C1{ Fi:15 Fc Fs:8}



static void Test_BFu15i_C_BFu8s()
{
  {
    init_simple_test("BFu15i_C_BFu8s");
    static STRUCT_IF_C BFu15i_C_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu8s");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_C_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu8s, BFu15i_C_BFu8s)
//============================================================================


struct  BFu15i_C_BFu9i  {
  unsigned int v1:15;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_C_BFu9i) C1{ Fi:15 Fc Fi:9}



static void Test_BFu15i_C_BFu9i()
{
  {
    init_simple_test("BFu15i_C_BFu9i");
    static STRUCT_IF_C BFu15i_C_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu9i");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_C_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu9i, BFu15i_C_BFu9i)
//============================================================================


struct  BFu15i_C_BFu9ll  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_C_BFu9ll) C1{ Fi:15 Fc FL:9}



static void Test_BFu15i_C_BFu9ll()
{
  {
    init_simple_test("BFu15i_C_BFu9ll");
    static STRUCT_IF_C BFu15i_C_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15i_C_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15i_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu9ll, BFu15i_C_BFu9ll)
//============================================================================


struct  BFu15i_C_BFu9s  {
  unsigned int v1:15;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_C_BFu9s) C1{ Fi:15 Fc Fs:9}



static void Test_BFu15i_C_BFu9s()
{
  {
    init_simple_test("BFu15i_C_BFu9s");
    static STRUCT_IF_C BFu15i_C_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_BFu9s");
    check_field_offset(lv, v2, 2, "BFu15i_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_C_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_BFu9s, BFu15i_C_BFu9s)
//============================================================================


struct  BFu15i_C_C  {
  unsigned int v1:15;
  char v2;
  char v3;
};
//SIG(1 BFu15i_C_C) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_C_C()
{
  {
    init_simple_test("BFu15i_C_C");
    static STRUCT_IF_C BFu15i_C_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_C");
    check_field_offset(lv, v2, 2, "BFu15i_C_C.v2");
    check_field_offset(lv, v3, 3, "BFu15i_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_C, BFu15i_C_C)
//============================================================================


struct  BFu15i_C_D  {
  unsigned int v1:15;
  char v2;
  double v3;
};
//SIG(1 BFu15i_C_D) C1{ Fi:15 Fc FL}



static void Test_BFu15i_C_D()
{
  {
    init_simple_test("BFu15i_C_D");
    static STRUCT_IF_C BFu15i_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_D");
    check_field_offset(lv, v2, 2, "BFu15i_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_D, BFu15i_C_D)
//============================================================================


struct  BFu15i_C_F  {
  unsigned int v1:15;
  char v2;
  float v3;
};
//SIG(1 BFu15i_C_F) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_C_F()
{
  {
    init_simple_test("BFu15i_C_F");
    static STRUCT_IF_C BFu15i_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_F");
    check_field_offset(lv, v2, 2, "BFu15i_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu15i_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_F, BFu15i_C_F)
//============================================================================


struct  BFu15i_C_I  {
  unsigned int v1:15;
  char v2;
  int v3;
};
//SIG(1 BFu15i_C_I) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_C_I()
{
  {
    init_simple_test("BFu15i_C_I");
    static STRUCT_IF_C BFu15i_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_I");
    check_field_offset(lv, v2, 2, "BFu15i_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu15i_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_I, BFu15i_C_I)
//============================================================================


struct  BFu15i_C_Ip  {
  unsigned int v1:15;
  char v2;
  int *v3;
};
//SIG(1 BFu15i_C_Ip) C1{ Fi:15 Fc Fp}



static void Test_BFu15i_C_Ip()
{
  {
    init_simple_test("BFu15i_C_Ip");
    static STRUCT_IF_C BFu15i_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_Ip");
    check_field_offset(lv, v2, 2, "BFu15i_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_Ip, BFu15i_C_Ip)
//============================================================================


struct  BFu15i_C_L  {
  unsigned int v1:15;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_C_L) C1{ Fi:15 Fc FL}



static void Test_BFu15i_C_L()
{
  {
    init_simple_test("BFu15i_C_L");
    static STRUCT_IF_C BFu15i_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_L");
    check_field_offset(lv, v2, 2, "BFu15i_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_L, BFu15i_C_L)
//============================================================================


struct  BFu15i_C_S  {
  unsigned int v1:15;
  char v2;
  short v3;
};
//SIG(1 BFu15i_C_S) C1{ Fi:15 Fc Fs}



static void Test_BFu15i_C_S()
{
  {
    init_simple_test("BFu15i_C_S");
    static STRUCT_IF_C BFu15i_C_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_S");
    check_field_offset(lv, v2, 2, "BFu15i_C_S.v2");
    check_field_offset(lv, v3, 4, "BFu15i_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_S, BFu15i_C_S)
//============================================================================


struct  BFu15i_C_Uc  {
  unsigned int v1:15;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu15i_C_Uc) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_C_Uc()
{
  {
    init_simple_test("BFu15i_C_Uc");
    static STRUCT_IF_C BFu15i_C_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_C_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_Uc");
    check_field_offset(lv, v2, 2, "BFu15i_C_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu15i_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_Uc, BFu15i_C_Uc)
//============================================================================


struct  BFu15i_C_Ui  {
  unsigned int v1:15;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu15i_C_Ui) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_C_Ui()
{
  {
    init_simple_test("BFu15i_C_Ui");
    static STRUCT_IF_C BFu15i_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_Ui");
    check_field_offset(lv, v2, 2, "BFu15i_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu15i_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_Ui, BFu15i_C_Ui)
//============================================================================


struct  BFu15i_C_Ul  {
  unsigned int v1:15;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_C_Ul) C1{ Fi:15 Fc FL}



static void Test_BFu15i_C_Ul()
{
  {
    init_simple_test("BFu15i_C_Ul");
    static STRUCT_IF_C BFu15i_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_Ul");
    check_field_offset(lv, v2, 2, "BFu15i_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_Ul, BFu15i_C_Ul)
//============================================================================


struct  BFu15i_C_Us  {
  unsigned int v1:15;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu15i_C_Us) C1{ Fi:15 Fc Fs}



static void Test_BFu15i_C_Us()
{
  {
    init_simple_test("BFu15i_C_Us");
    static STRUCT_IF_C BFu15i_C_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_C_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_Us");
    check_field_offset(lv, v2, 2, "BFu15i_C_Us.v2");
    check_field_offset(lv, v3, 4, "BFu15i_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_Us, BFu15i_C_Us)
//============================================================================


struct  BFu15i_C_Vp  {
  unsigned int v1:15;
  char v2;
  void *v3;
};
//SIG(1 BFu15i_C_Vp) C1{ Fi:15 Fc Fp}



static void Test_BFu15i_C_Vp()
{
  {
    init_simple_test("BFu15i_C_Vp");
    static STRUCT_IF_C BFu15i_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_C_Vp");
    check_field_offset(lv, v2, 2, "BFu15i_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_C_Vp, BFu15i_C_Vp)
//============================================================================


struct  BFu15i_D  {
  unsigned int v1:15;
  double v2;
};
//SIG(1 BFu15i_D) C1{ Fi:15 FL}



static void Test_BFu15i_D()
{
  {
    init_simple_test("BFu15i_D");
    static STRUCT_IF_C BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D, BFu15i_D)
//============================================================================


struct  BFu15i_D_BFu15i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_D_BFu15i) C1{ Fi:15 FL Fi:15}



static void Test_BFu15i_D_BFu15i()
{
  {
    init_simple_test("BFu15i_D_BFu15i");
    static STRUCT_IF_C BFu15i_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu15i, BFu15i_D_BFu15i)
//============================================================================


struct  BFu15i_D_BFu15ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_D_BFu15ll) C1{ Fi:15 FL FL:15}



static void Test_BFu15i_D_BFu15ll()
{
  {
    init_simple_test("BFu15i_D_BFu15ll");
    static STRUCT_IF_C BFu15i_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu15ll, BFu15i_D_BFu15ll)
//============================================================================


struct  BFu15i_D_BFu15s  {
  unsigned int v1:15;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_D_BFu15s) C1{ Fi:15 FL Fs:15}



static void Test_BFu15i_D_BFu15s()
{
  {
    init_simple_test("BFu15i_D_BFu15s");
    static STRUCT_IF_C BFu15i_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu15s, BFu15i_D_BFu15s)
//============================================================================


struct  BFu15i_D_BFu16i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_D_BFu16i) C1{ Fi:15 FL Fi:16}



static void Test_BFu15i_D_BFu16i()
{
  {
    init_simple_test("BFu15i_D_BFu16i");
    static STRUCT_IF_C BFu15i_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu16i, BFu15i_D_BFu16i)
//============================================================================


struct  BFu15i_D_BFu16ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_D_BFu16ll) C1{ Fi:15 FL FL:16}



static void Test_BFu15i_D_BFu16ll()
{
  {
    init_simple_test("BFu15i_D_BFu16ll");
    static STRUCT_IF_C BFu15i_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu16ll, BFu15i_D_BFu16ll)
//============================================================================


struct  BFu15i_D_BFu16s  {
  unsigned int v1:15;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_D_BFu16s) C1{ Fi:15 FL Fs:16}



static void Test_BFu15i_D_BFu16s()
{
  {
    init_simple_test("BFu15i_D_BFu16s");
    static STRUCT_IF_C BFu15i_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu16s, BFu15i_D_BFu16s)
//============================================================================


struct  BFu15i_D_BFu17i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_D_BFu17i) C1{ Fi:15 FL Fi:17}



static void Test_BFu15i_D_BFu17i()
{
  {
    init_simple_test("BFu15i_D_BFu17i");
    static STRUCT_IF_C BFu15i_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu15i_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu15i_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu17i, BFu15i_D_BFu17i)
//============================================================================


struct  BFu15i_D_BFu17ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_D_BFu17ll) C1{ Fi:15 FL FL:17}



static void Test_BFu15i_D_BFu17ll()
{
  {
    init_simple_test("BFu15i_D_BFu17ll");
    static STRUCT_IF_C BFu15i_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu15i_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu15i_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu17ll, BFu15i_D_BFu17ll)
//============================================================================


struct  BFu15i_D_BFu1c  {
  unsigned int v1:15;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_D_BFu1c) C1{ Fi:15 FL Fc:1}



static void Test_BFu15i_D_BFu1c()
{
  {
    init_simple_test("BFu15i_D_BFu1c");
    static STRUCT_IF_C BFu15i_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu1c, BFu15i_D_BFu1c)
//============================================================================


struct  BFu15i_D_BFu1i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_D_BFu1i) C1{ Fi:15 FL Fi:1}



static void Test_BFu15i_D_BFu1i()
{
  {
    init_simple_test("BFu15i_D_BFu1i");
    static STRUCT_IF_C BFu15i_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu1i, BFu15i_D_BFu1i)
//============================================================================


struct  BFu15i_D_BFu1ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_D_BFu1ll) C1{ Fi:15 FL FL:1}



static void Test_BFu15i_D_BFu1ll()
{
  {
    init_simple_test("BFu15i_D_BFu1ll");
    static STRUCT_IF_C BFu15i_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu1ll, BFu15i_D_BFu1ll)
//============================================================================


struct  BFu15i_D_BFu1s  {
  unsigned int v1:15;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_D_BFu1s) C1{ Fi:15 FL Fs:1}



static void Test_BFu15i_D_BFu1s()
{
  {
    init_simple_test("BFu15i_D_BFu1s");
    static STRUCT_IF_C BFu15i_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu1s, BFu15i_D_BFu1s)
//============================================================================


struct  BFu15i_D_BFu31i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_D_BFu31i) C1{ Fi:15 FL Fi:31}



static void Test_BFu15i_D_BFu31i()
{
  {
    init_simple_test("BFu15i_D_BFu31i");
    static STRUCT_IF_C BFu15i_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu15i_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu15i_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu31i, BFu15i_D_BFu31i)
//============================================================================


struct  BFu15i_D_BFu31ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_D_BFu31ll) C1{ Fi:15 FL FL:31}



static void Test_BFu15i_D_BFu31ll()
{
  {
    init_simple_test("BFu15i_D_BFu31ll");
    static STRUCT_IF_C BFu15i_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu15i_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu15i_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu31ll, BFu15i_D_BFu31ll)
//============================================================================


struct  BFu15i_D_BFu32i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_D_BFu32i) C1{ Fi:15 FL Fi:32}



static void Test_BFu15i_D_BFu32i()
{
  {
    init_simple_test("BFu15i_D_BFu32i");
    static STRUCT_IF_C BFu15i_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu15i_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu15i_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu32i, BFu15i_D_BFu32i)
//============================================================================


struct  BFu15i_D_BFu32ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_D_BFu32ll) C1{ Fi:15 FL FL:32}



static void Test_BFu15i_D_BFu32ll()
{
  {
    init_simple_test("BFu15i_D_BFu32ll");
    static STRUCT_IF_C BFu15i_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu15i_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu15i_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu32ll, BFu15i_D_BFu32ll)
//============================================================================


struct  BFu15i_D_BFu33  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_D_BFu33) C1{ Fi:15 FL FL:33}



static void Test_BFu15i_D_BFu33()
{
  {
    init_simple_test("BFu15i_D_BFu33");
    static STRUCT_IF_C BFu15i_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu15i_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu15i_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu33, BFu15i_D_BFu33)
//============================================================================


struct  BFu15i_D_BFu7c  {
  unsigned int v1:15;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_D_BFu7c) C1{ Fi:15 FL Fc:7}



static void Test_BFu15i_D_BFu7c()
{
  {
    init_simple_test("BFu15i_D_BFu7c");
    static STRUCT_IF_C BFu15i_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu7c, BFu15i_D_BFu7c)
//============================================================================


struct  BFu15i_D_BFu7i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_D_BFu7i) C1{ Fi:15 FL Fi:7}



static void Test_BFu15i_D_BFu7i()
{
  {
    init_simple_test("BFu15i_D_BFu7i");
    static STRUCT_IF_C BFu15i_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu7i, BFu15i_D_BFu7i)
//============================================================================


struct  BFu15i_D_BFu7ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_D_BFu7ll) C1{ Fi:15 FL FL:7}



static void Test_BFu15i_D_BFu7ll()
{
  {
    init_simple_test("BFu15i_D_BFu7ll");
    static STRUCT_IF_C BFu15i_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu7ll, BFu15i_D_BFu7ll)
//============================================================================


struct  BFu15i_D_BFu7s  {
  unsigned int v1:15;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_D_BFu7s) C1{ Fi:15 FL Fs:7}



static void Test_BFu15i_D_BFu7s()
{
  {
    init_simple_test("BFu15i_D_BFu7s");
    static STRUCT_IF_C BFu15i_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu7s, BFu15i_D_BFu7s)
//============================================================================


struct  BFu15i_D_BFu8c  {
  unsigned int v1:15;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_D_BFu8c) C1{ Fi:15 FL Fc:8}



static void Test_BFu15i_D_BFu8c()
{
  {
    init_simple_test("BFu15i_D_BFu8c");
    static STRUCT_IF_C BFu15i_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu8c, BFu15i_D_BFu8c)
//============================================================================


struct  BFu15i_D_BFu8i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_D_BFu8i) C1{ Fi:15 FL Fi:8}



static void Test_BFu15i_D_BFu8i()
{
  {
    init_simple_test("BFu15i_D_BFu8i");
    static STRUCT_IF_C BFu15i_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu8i, BFu15i_D_BFu8i)
//============================================================================


struct  BFu15i_D_BFu8ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_D_BFu8ll) C1{ Fi:15 FL FL:8}



static void Test_BFu15i_D_BFu8ll()
{
  {
    init_simple_test("BFu15i_D_BFu8ll");
    static STRUCT_IF_C BFu15i_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu8ll, BFu15i_D_BFu8ll)
//============================================================================


struct  BFu15i_D_BFu8s  {
  unsigned int v1:15;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_D_BFu8s) C1{ Fi:15 FL Fs:8}



static void Test_BFu15i_D_BFu8s()
{
  {
    init_simple_test("BFu15i_D_BFu8s");
    static STRUCT_IF_C BFu15i_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu8s, BFu15i_D_BFu8s)
//============================================================================


struct  BFu15i_D_BFu9i  {
  unsigned int v1:15;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_D_BFu9i) C1{ Fi:15 FL Fi:9}



static void Test_BFu15i_D_BFu9i()
{
  {
    init_simple_test("BFu15i_D_BFu9i");
    static STRUCT_IF_C BFu15i_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu9i, BFu15i_D_BFu9i)
//============================================================================


struct  BFu15i_D_BFu9ll  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_D_BFu9ll) C1{ Fi:15 FL FL:9}



static void Test_BFu15i_D_BFu9ll()
{
  {
    init_simple_test("BFu15i_D_BFu9ll");
    static STRUCT_IF_C BFu15i_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu9ll, BFu15i_D_BFu9ll)
//============================================================================


struct  BFu15i_D_BFu9s  {
  unsigned int v1:15;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_D_BFu9s) C1{ Fi:15 FL Fs:9}



static void Test_BFu15i_D_BFu9s()
{
  {
    init_simple_test("BFu15i_D_BFu9s");
    static STRUCT_IF_C BFu15i_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_BFu9s, BFu15i_D_BFu9s)
//============================================================================


struct  BFu15i_D_C  {
  unsigned int v1:15;
  double v2;
  char v3;
};
//SIG(1 BFu15i_D_C) C1{ Fi:15 FL Fc}



static void Test_BFu15i_D_C()
{
  {
    init_simple_test("BFu15i_D_C");
    static STRUCT_IF_C BFu15i_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_C, BFu15i_D_C)
//============================================================================


struct  BFu15i_D_D  {
  unsigned int v1:15;
  double v2;
  double v3;
};
//SIG(1 BFu15i_D_D) C1{ Fi:15 FL[2]}



static void Test_BFu15i_D_D()
{
  {
    init_simple_test("BFu15i_D_D");
    static STRUCT_IF_C BFu15i_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_D, BFu15i_D_D)
//============================================================================


struct  BFu15i_D_F  {
  unsigned int v1:15;
  double v2;
  float v3;
};
//SIG(1 BFu15i_D_F) C1{ Fi:15 FL Fi}



static void Test_BFu15i_D_F()
{
  {
    init_simple_test("BFu15i_D_F");
    static STRUCT_IF_C BFu15i_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_F, BFu15i_D_F)
//============================================================================


struct  BFu15i_D_I  {
  unsigned int v1:15;
  double v2;
  int v3;
};
//SIG(1 BFu15i_D_I) C1{ Fi:15 FL Fi}



static void Test_BFu15i_D_I()
{
  {
    init_simple_test("BFu15i_D_I");
    static STRUCT_IF_C BFu15i_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_I, BFu15i_D_I)
//============================================================================


struct  BFu15i_D_Ip  {
  unsigned int v1:15;
  double v2;
  int *v3;
};
//SIG(1 BFu15i_D_Ip) C1{ Fi:15 FL Fp}



static void Test_BFu15i_D_Ip()
{
  {
    init_simple_test("BFu15i_D_Ip");
    static STRUCT_IF_C BFu15i_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_Ip, BFu15i_D_Ip)
//============================================================================


struct  BFu15i_D_L  {
  unsigned int v1:15;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_D_L) C1{ Fi:15 FL[2]}



static void Test_BFu15i_D_L()
{
  {
    init_simple_test("BFu15i_D_L");
    static STRUCT_IF_C BFu15i_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_L, BFu15i_D_L)
//============================================================================


struct  BFu15i_D_S  {
  unsigned int v1:15;
  double v2;
  short v3;
};
//SIG(1 BFu15i_D_S) C1{ Fi:15 FL Fs}



static void Test_BFu15i_D_S()
{
  {
    init_simple_test("BFu15i_D_S");
    static STRUCT_IF_C BFu15i_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_S, BFu15i_D_S)
//============================================================================


struct  BFu15i_D_Uc  {
  unsigned int v1:15;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu15i_D_Uc) C1{ Fi:15 FL Fc}



static void Test_BFu15i_D_Uc()
{
  {
    init_simple_test("BFu15i_D_Uc");
    static STRUCT_IF_C BFu15i_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_Uc, BFu15i_D_Uc)
//============================================================================


struct  BFu15i_D_Ui  {
  unsigned int v1:15;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu15i_D_Ui) C1{ Fi:15 FL Fi}



static void Test_BFu15i_D_Ui()
{
  {
    init_simple_test("BFu15i_D_Ui");
    static STRUCT_IF_C BFu15i_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_Ui, BFu15i_D_Ui)
//============================================================================


struct  BFu15i_D_Ul  {
  unsigned int v1:15;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_D_Ul) C1{ Fi:15 FL[2]}



static void Test_BFu15i_D_Ul()
{
  {
    init_simple_test("BFu15i_D_Ul");
    static STRUCT_IF_C BFu15i_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_Ul, BFu15i_D_Ul)
//============================================================================


struct  BFu15i_D_Us  {
  unsigned int v1:15;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu15i_D_Us) C1{ Fi:15 FL Fs}



static void Test_BFu15i_D_Us()
{
  {
    init_simple_test("BFu15i_D_Us");
    static STRUCT_IF_C BFu15i_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_Us, BFu15i_D_Us)
//============================================================================


struct  BFu15i_D_Vp  {
  unsigned int v1:15;
  double v2;
  void *v3;
};
//SIG(1 BFu15i_D_Vp) C1{ Fi:15 FL Fp}



static void Test_BFu15i_D_Vp()
{
  {
    init_simple_test("BFu15i_D_Vp");
    static STRUCT_IF_C BFu15i_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_D_Vp, BFu15i_D_Vp)
//============================================================================


struct  BFu15i_F  {
  unsigned int v1:15;
  float v2;
};
//SIG(1 BFu15i_F) C1{ Fi:15 Fi}



static void Test_BFu15i_F()
{
  {
    init_simple_test("BFu15i_F");
    static STRUCT_IF_C BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F");
    check_field_offset(lv, v2, 4, "BFu15i_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F, BFu15i_F)
//============================================================================


struct  BFu15i_F_BFu15i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_F_BFu15i) C1{ Fi:15 Fi Fi:15}



static void Test_BFu15i_F_BFu15i()
{
  {
    init_simple_test("BFu15i_F_BFu15i");
    static STRUCT_IF_C BFu15i_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu15i, BFu15i_F_BFu15i)
//============================================================================


struct  BFu15i_F_BFu15ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_F_BFu15ll) C1{ Fi:15 Fi FL:15}



static void Test_BFu15i_F_BFu15ll()
{
  {
    init_simple_test("BFu15i_F_BFu15ll");
    static STRUCT_IF_C BFu15i_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu15ll, BFu15i_F_BFu15ll)
//============================================================================


struct  BFu15i_F_BFu15s  {
  unsigned int v1:15;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_F_BFu15s) C1{ Fi:15 Fi Fs:15}



static void Test_BFu15i_F_BFu15s()
{
  {
    init_simple_test("BFu15i_F_BFu15s");
    static STRUCT_IF_C BFu15i_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu15s, BFu15i_F_BFu15s)
//============================================================================


struct  BFu15i_F_BFu16i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_F_BFu16i) C1{ Fi:15 Fi Fi:16}



static void Test_BFu15i_F_BFu16i()
{
  {
    init_simple_test("BFu15i_F_BFu16i");
    static STRUCT_IF_C BFu15i_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu16i, BFu15i_F_BFu16i)
//============================================================================


struct  BFu15i_F_BFu16ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_F_BFu16ll) C1{ Fi:15 Fi FL:16}



static void Test_BFu15i_F_BFu16ll()
{
  {
    init_simple_test("BFu15i_F_BFu16ll");
    static STRUCT_IF_C BFu15i_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu16ll, BFu15i_F_BFu16ll)
//============================================================================


struct  BFu15i_F_BFu16s  {
  unsigned int v1:15;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_F_BFu16s) C1{ Fi:15 Fi Fs:16}



static void Test_BFu15i_F_BFu16s()
{
  {
    init_simple_test("BFu15i_F_BFu16s");
    static STRUCT_IF_C BFu15i_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu16s, BFu15i_F_BFu16s)
//============================================================================


struct  BFu15i_F_BFu17i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_F_BFu17i) C1{ Fi:15 Fi Fi:17}



static void Test_BFu15i_F_BFu17i()
{
  {
    init_simple_test("BFu15i_F_BFu17i");
    static STRUCT_IF_C BFu15i_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu17i, BFu15i_F_BFu17i)
//============================================================================


struct  BFu15i_F_BFu17ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_F_BFu17ll) C1{ Fi:15 Fi FL:17}



static void Test_BFu15i_F_BFu17ll()
{
  {
    init_simple_test("BFu15i_F_BFu17ll");
    static STRUCT_IF_C BFu15i_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu17ll, BFu15i_F_BFu17ll)
//============================================================================


struct  BFu15i_F_BFu1c  {
  unsigned int v1:15;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_F_BFu1c) C1{ Fi:15 Fi Fc:1}



static void Test_BFu15i_F_BFu1c()
{
  {
    init_simple_test("BFu15i_F_BFu1c");
    static STRUCT_IF_C BFu15i_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu1c, BFu15i_F_BFu1c)
//============================================================================


struct  BFu15i_F_BFu1i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_F_BFu1i) C1{ Fi:15 Fi Fi:1}



static void Test_BFu15i_F_BFu1i()
{
  {
    init_simple_test("BFu15i_F_BFu1i");
    static STRUCT_IF_C BFu15i_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu1i, BFu15i_F_BFu1i)
//============================================================================


struct  BFu15i_F_BFu1ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_F_BFu1ll) C1{ Fi:15 Fi FL:1}



static void Test_BFu15i_F_BFu1ll()
{
  {
    init_simple_test("BFu15i_F_BFu1ll");
    static STRUCT_IF_C BFu15i_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu1ll, BFu15i_F_BFu1ll)
//============================================================================


struct  BFu15i_F_BFu1s  {
  unsigned int v1:15;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_F_BFu1s) C1{ Fi:15 Fi Fs:1}



static void Test_BFu15i_F_BFu1s()
{
  {
    init_simple_test("BFu15i_F_BFu1s");
    static STRUCT_IF_C BFu15i_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu1s, BFu15i_F_BFu1s)
//============================================================================


struct  BFu15i_F_BFu31i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_F_BFu31i) C1{ Fi:15 Fi Fi:31}



static void Test_BFu15i_F_BFu31i()
{
  {
    init_simple_test("BFu15i_F_BFu31i");
    static STRUCT_IF_C BFu15i_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu31i, BFu15i_F_BFu31i)
//============================================================================


struct  BFu15i_F_BFu31ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_F_BFu31ll) C1{ Fi:15 Fi FL:31}



static void Test_BFu15i_F_BFu31ll()
{
  {
    init_simple_test("BFu15i_F_BFu31ll");
    static STRUCT_IF_C BFu15i_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu31ll, BFu15i_F_BFu31ll)
//============================================================================


struct  BFu15i_F_BFu32i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_F_BFu32i) C1{ Fi:15 Fi Fi:32}



static void Test_BFu15i_F_BFu32i()
{
  {
    init_simple_test("BFu15i_F_BFu32i");
    static STRUCT_IF_C BFu15i_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu32i, BFu15i_F_BFu32i)
//============================================================================


struct  BFu15i_F_BFu32ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_F_BFu32ll) C1{ Fi:15 Fi FL:32}



static void Test_BFu15i_F_BFu32ll()
{
  {
    init_simple_test("BFu15i_F_BFu32ll");
    static STRUCT_IF_C BFu15i_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu32ll, BFu15i_F_BFu32ll)
//============================================================================


struct  BFu15i_F_BFu33  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_F_BFu33) C1{ Fi:15 Fi FL:33}



static void Test_BFu15i_F_BFu33()
{
  {
    init_simple_test("BFu15i_F_BFu33");
    static STRUCT_IF_C BFu15i_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu15i_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu15i_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu33, BFu15i_F_BFu33)
//============================================================================


struct  BFu15i_F_BFu7c  {
  unsigned int v1:15;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_F_BFu7c) C1{ Fi:15 Fi Fc:7}



static void Test_BFu15i_F_BFu7c()
{
  {
    init_simple_test("BFu15i_F_BFu7c");
    static STRUCT_IF_C BFu15i_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu7c, BFu15i_F_BFu7c)
//============================================================================


struct  BFu15i_F_BFu7i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_F_BFu7i) C1{ Fi:15 Fi Fi:7}



static void Test_BFu15i_F_BFu7i()
{
  {
    init_simple_test("BFu15i_F_BFu7i");
    static STRUCT_IF_C BFu15i_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu7i, BFu15i_F_BFu7i)
//============================================================================


struct  BFu15i_F_BFu7ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_F_BFu7ll) C1{ Fi:15 Fi FL:7}



static void Test_BFu15i_F_BFu7ll()
{
  {
    init_simple_test("BFu15i_F_BFu7ll");
    static STRUCT_IF_C BFu15i_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu7ll, BFu15i_F_BFu7ll)
//============================================================================


struct  BFu15i_F_BFu7s  {
  unsigned int v1:15;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_F_BFu7s) C1{ Fi:15 Fi Fs:7}



static void Test_BFu15i_F_BFu7s()
{
  {
    init_simple_test("BFu15i_F_BFu7s");
    static STRUCT_IF_C BFu15i_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu7s, BFu15i_F_BFu7s)
//============================================================================


struct  BFu15i_F_BFu8c  {
  unsigned int v1:15;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_F_BFu8c) C1{ Fi:15 Fi Fc:8}



static void Test_BFu15i_F_BFu8c()
{
  {
    init_simple_test("BFu15i_F_BFu8c");
    static STRUCT_IF_C BFu15i_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu8c, BFu15i_F_BFu8c)
//============================================================================


struct  BFu15i_F_BFu8i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_F_BFu8i) C1{ Fi:15 Fi Fi:8}



static void Test_BFu15i_F_BFu8i()
{
  {
    init_simple_test("BFu15i_F_BFu8i");
    static STRUCT_IF_C BFu15i_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu8i, BFu15i_F_BFu8i)
//============================================================================


struct  BFu15i_F_BFu8ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_F_BFu8ll) C1{ Fi:15 Fi FL:8}



static void Test_BFu15i_F_BFu8ll()
{
  {
    init_simple_test("BFu15i_F_BFu8ll");
    static STRUCT_IF_C BFu15i_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu8ll, BFu15i_F_BFu8ll)
//============================================================================


struct  BFu15i_F_BFu8s  {
  unsigned int v1:15;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_F_BFu8s) C1{ Fi:15 Fi Fs:8}



static void Test_BFu15i_F_BFu8s()
{
  {
    init_simple_test("BFu15i_F_BFu8s");
    static STRUCT_IF_C BFu15i_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu8s, BFu15i_F_BFu8s)
//============================================================================


struct  BFu15i_F_BFu9i  {
  unsigned int v1:15;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_F_BFu9i) C1{ Fi:15 Fi Fi:9}



static void Test_BFu15i_F_BFu9i()
{
  {
    init_simple_test("BFu15i_F_BFu9i");
    static STRUCT_IF_C BFu15i_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu9i, BFu15i_F_BFu9i)
//============================================================================


struct  BFu15i_F_BFu9ll  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_F_BFu9ll) C1{ Fi:15 Fi FL:9}



static void Test_BFu15i_F_BFu9ll()
{
  {
    init_simple_test("BFu15i_F_BFu9ll");
    static STRUCT_IF_C BFu15i_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu9ll, BFu15i_F_BFu9ll)
//============================================================================


struct  BFu15i_F_BFu9s  {
  unsigned int v1:15;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_F_BFu9s) C1{ Fi:15 Fi Fs:9}



static void Test_BFu15i_F_BFu9s()
{
  {
    init_simple_test("BFu15i_F_BFu9s");
    static STRUCT_IF_C BFu15i_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu15i_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_BFu9s, BFu15i_F_BFu9s)
//============================================================================


struct  BFu15i_F_C  {
  unsigned int v1:15;
  float v2;
  char v3;
};
//SIG(1 BFu15i_F_C) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_F_C()
{
  {
    init_simple_test("BFu15i_F_C");
    static STRUCT_IF_C BFu15i_F_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_C");
    check_field_offset(lv, v2, 4, "BFu15i_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_C, BFu15i_F_C)
//============================================================================


struct  BFu15i_F_D  {
  unsigned int v1:15;
  float v2;
  double v3;
};
//SIG(1 BFu15i_F_D) C1{ Fi:15 Fi FL}



static void Test_BFu15i_F_D()
{
  {
    init_simple_test("BFu15i_F_D");
    static STRUCT_IF_C BFu15i_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_D");
    check_field_offset(lv, v2, 4, "BFu15i_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_D, BFu15i_F_D)
//============================================================================


struct  BFu15i_F_F  {
  unsigned int v1:15;
  float v2;
  float v3;
};
//SIG(1 BFu15i_F_F) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_F_F()
{
  {
    init_simple_test("BFu15i_F_F");
    static STRUCT_IF_C BFu15i_F_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_F");
    check_field_offset(lv, v2, 4, "BFu15i_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_F, BFu15i_F_F)
//============================================================================


struct  BFu15i_F_I  {
  unsigned int v1:15;
  float v2;
  int v3;
};
//SIG(1 BFu15i_F_I) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_F_I()
{
  {
    init_simple_test("BFu15i_F_I");
    static STRUCT_IF_C BFu15i_F_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_I");
    check_field_offset(lv, v2, 4, "BFu15i_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_I, BFu15i_F_I)
//============================================================================


struct  BFu15i_F_Ip  {
  unsigned int v1:15;
  float v2;
  int *v3;
};
//SIG(1 BFu15i_F_Ip) C1{ Fi:15 Fi Fp}



static void Test_BFu15i_F_Ip()
{
  {
    init_simple_test("BFu15i_F_Ip");
    static STRUCT_IF_C BFu15i_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_Ip");
    check_field_offset(lv, v2, 4, "BFu15i_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_Ip, BFu15i_F_Ip)
//============================================================================


struct  BFu15i_F_L  {
  unsigned int v1:15;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_F_L) C1{ Fi:15 Fi FL}



static void Test_BFu15i_F_L()
{
  {
    init_simple_test("BFu15i_F_L");
    static STRUCT_IF_C BFu15i_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_L");
    check_field_offset(lv, v2, 4, "BFu15i_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_L, BFu15i_F_L)
//============================================================================


struct  BFu15i_F_S  {
  unsigned int v1:15;
  float v2;
  short v3;
};
//SIG(1 BFu15i_F_S) C1{ Fi:15 Fi Fs}



static void Test_BFu15i_F_S()
{
  {
    init_simple_test("BFu15i_F_S");
    static STRUCT_IF_C BFu15i_F_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_S");
    check_field_offset(lv, v2, 4, "BFu15i_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_S, BFu15i_F_S)
//============================================================================


struct  BFu15i_F_Uc  {
  unsigned int v1:15;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu15i_F_Uc) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_F_Uc()
{
  {
    init_simple_test("BFu15i_F_Uc");
    static STRUCT_IF_C BFu15i_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_Uc");
    check_field_offset(lv, v2, 4, "BFu15i_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_Uc, BFu15i_F_Uc)
//============================================================================


struct  BFu15i_F_Ui  {
  unsigned int v1:15;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu15i_F_Ui) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_F_Ui()
{
  {
    init_simple_test("BFu15i_F_Ui");
    static STRUCT_IF_C BFu15i_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_Ui");
    check_field_offset(lv, v2, 4, "BFu15i_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_Ui, BFu15i_F_Ui)
//============================================================================


struct  BFu15i_F_Ul  {
  unsigned int v1:15;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_F_Ul) C1{ Fi:15 Fi FL}



static void Test_BFu15i_F_Ul()
{
  {
    init_simple_test("BFu15i_F_Ul");
    static STRUCT_IF_C BFu15i_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_Ul");
    check_field_offset(lv, v2, 4, "BFu15i_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_Ul, BFu15i_F_Ul)
//============================================================================


struct  BFu15i_F_Us  {
  unsigned int v1:15;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu15i_F_Us) C1{ Fi:15 Fi Fs}



static void Test_BFu15i_F_Us()
{
  {
    init_simple_test("BFu15i_F_Us");
    static STRUCT_IF_C BFu15i_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_Us");
    check_field_offset(lv, v2, 4, "BFu15i_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_Us, BFu15i_F_Us)
//============================================================================


struct  BFu15i_F_Vp  {
  unsigned int v1:15;
  float v2;
  void *v3;
};
//SIG(1 BFu15i_F_Vp) C1{ Fi:15 Fi Fp}



static void Test_BFu15i_F_Vp()
{
  {
    init_simple_test("BFu15i_F_Vp");
    static STRUCT_IF_C BFu15i_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_F_Vp");
    check_field_offset(lv, v2, 4, "BFu15i_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu15i_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_F_Vp, BFu15i_F_Vp)
//============================================================================


struct  BFu15i_I  {
  unsigned int v1:15;
  int v2;
};
//SIG(1 BFu15i_I) C1{ Fi:15 Fi}



static void Test_BFu15i_I()
{
  {
    init_simple_test("BFu15i_I");
    static STRUCT_IF_C BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I");
    check_field_offset(lv, v2, 4, "BFu15i_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I, BFu15i_I)
//============================================================================


struct  BFu15i_I_BFu15i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_I_BFu15i) C1{ Fi:15 Fi Fi:15}



static void Test_BFu15i_I_BFu15i()
{
  {
    init_simple_test("BFu15i_I_BFu15i");
    static STRUCT_IF_C BFu15i_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu15i, BFu15i_I_BFu15i)
//============================================================================


struct  BFu15i_I_BFu15ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_I_BFu15ll) C1{ Fi:15 Fi FL:15}



static void Test_BFu15i_I_BFu15ll()
{
  {
    init_simple_test("BFu15i_I_BFu15ll");
    static STRUCT_IF_C BFu15i_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu15ll, BFu15i_I_BFu15ll)
//============================================================================


struct  BFu15i_I_BFu15s  {
  unsigned int v1:15;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_I_BFu15s) C1{ Fi:15 Fi Fs:15}



static void Test_BFu15i_I_BFu15s()
{
  {
    init_simple_test("BFu15i_I_BFu15s");
    static STRUCT_IF_C BFu15i_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu15s, BFu15i_I_BFu15s)
//============================================================================


struct  BFu15i_I_BFu16i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_I_BFu16i) C1{ Fi:15 Fi Fi:16}



static void Test_BFu15i_I_BFu16i()
{
  {
    init_simple_test("BFu15i_I_BFu16i");
    static STRUCT_IF_C BFu15i_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu16i, BFu15i_I_BFu16i)
//============================================================================


struct  BFu15i_I_BFu16ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_I_BFu16ll) C1{ Fi:15 Fi FL:16}



static void Test_BFu15i_I_BFu16ll()
{
  {
    init_simple_test("BFu15i_I_BFu16ll");
    static STRUCT_IF_C BFu15i_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu16ll, BFu15i_I_BFu16ll)
//============================================================================


struct  BFu15i_I_BFu16s  {
  unsigned int v1:15;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_I_BFu16s) C1{ Fi:15 Fi Fs:16}



static void Test_BFu15i_I_BFu16s()
{
  {
    init_simple_test("BFu15i_I_BFu16s");
    static STRUCT_IF_C BFu15i_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu16s, BFu15i_I_BFu16s)
//============================================================================


struct  BFu15i_I_BFu17i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_I_BFu17i) C1{ Fi:15 Fi Fi:17}



static void Test_BFu15i_I_BFu17i()
{
  {
    init_simple_test("BFu15i_I_BFu17i");
    static STRUCT_IF_C BFu15i_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu17i, BFu15i_I_BFu17i)
//============================================================================


struct  BFu15i_I_BFu17ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_I_BFu17ll) C1{ Fi:15 Fi FL:17}



static void Test_BFu15i_I_BFu17ll()
{
  {
    init_simple_test("BFu15i_I_BFu17ll");
    static STRUCT_IF_C BFu15i_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu17ll, BFu15i_I_BFu17ll)
//============================================================================


struct  BFu15i_I_BFu1c  {
  unsigned int v1:15;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_I_BFu1c) C1{ Fi:15 Fi Fc:1}



static void Test_BFu15i_I_BFu1c()
{
  {
    init_simple_test("BFu15i_I_BFu1c");
    static STRUCT_IF_C BFu15i_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu1c, BFu15i_I_BFu1c)
//============================================================================


struct  BFu15i_I_BFu1i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_I_BFu1i) C1{ Fi:15 Fi Fi:1}



static void Test_BFu15i_I_BFu1i()
{
  {
    init_simple_test("BFu15i_I_BFu1i");
    static STRUCT_IF_C BFu15i_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu1i, BFu15i_I_BFu1i)
//============================================================================


struct  BFu15i_I_BFu1ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_I_BFu1ll) C1{ Fi:15 Fi FL:1}



static void Test_BFu15i_I_BFu1ll()
{
  {
    init_simple_test("BFu15i_I_BFu1ll");
    static STRUCT_IF_C BFu15i_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu1ll, BFu15i_I_BFu1ll)
//============================================================================


struct  BFu15i_I_BFu1s  {
  unsigned int v1:15;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_I_BFu1s) C1{ Fi:15 Fi Fs:1}



static void Test_BFu15i_I_BFu1s()
{
  {
    init_simple_test("BFu15i_I_BFu1s");
    static STRUCT_IF_C BFu15i_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu1s, BFu15i_I_BFu1s)
//============================================================================


struct  BFu15i_I_BFu31i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_I_BFu31i) C1{ Fi:15 Fi Fi:31}



static void Test_BFu15i_I_BFu31i()
{
  {
    init_simple_test("BFu15i_I_BFu31i");
    static STRUCT_IF_C BFu15i_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu31i, BFu15i_I_BFu31i)
//============================================================================


struct  BFu15i_I_BFu31ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_I_BFu31ll) C1{ Fi:15 Fi FL:31}



static void Test_BFu15i_I_BFu31ll()
{
  {
    init_simple_test("BFu15i_I_BFu31ll");
    static STRUCT_IF_C BFu15i_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu31ll, BFu15i_I_BFu31ll)
//============================================================================


struct  BFu15i_I_BFu32i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_I_BFu32i) C1{ Fi:15 Fi Fi:32}



static void Test_BFu15i_I_BFu32i()
{
  {
    init_simple_test("BFu15i_I_BFu32i");
    static STRUCT_IF_C BFu15i_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu32i, BFu15i_I_BFu32i)
//============================================================================


struct  BFu15i_I_BFu32ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_I_BFu32ll) C1{ Fi:15 Fi FL:32}



static void Test_BFu15i_I_BFu32ll()
{
  {
    init_simple_test("BFu15i_I_BFu32ll");
    static STRUCT_IF_C BFu15i_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu32ll, BFu15i_I_BFu32ll)
//============================================================================


struct  BFu15i_I_BFu33  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_I_BFu33) C1{ Fi:15 Fi FL:33}



static void Test_BFu15i_I_BFu33()
{
  {
    init_simple_test("BFu15i_I_BFu33");
    static STRUCT_IF_C BFu15i_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu15i_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu15i_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu33, BFu15i_I_BFu33)
//============================================================================


struct  BFu15i_I_BFu7c  {
  unsigned int v1:15;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_I_BFu7c) C1{ Fi:15 Fi Fc:7}



static void Test_BFu15i_I_BFu7c()
{
  {
    init_simple_test("BFu15i_I_BFu7c");
    static STRUCT_IF_C BFu15i_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu7c, BFu15i_I_BFu7c)
//============================================================================


struct  BFu15i_I_BFu7i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_I_BFu7i) C1{ Fi:15 Fi Fi:7}



static void Test_BFu15i_I_BFu7i()
{
  {
    init_simple_test("BFu15i_I_BFu7i");
    static STRUCT_IF_C BFu15i_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu7i, BFu15i_I_BFu7i)
//============================================================================


struct  BFu15i_I_BFu7ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_I_BFu7ll) C1{ Fi:15 Fi FL:7}



static void Test_BFu15i_I_BFu7ll()
{
  {
    init_simple_test("BFu15i_I_BFu7ll");
    static STRUCT_IF_C BFu15i_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu7ll, BFu15i_I_BFu7ll)
//============================================================================


struct  BFu15i_I_BFu7s  {
  unsigned int v1:15;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_I_BFu7s) C1{ Fi:15 Fi Fs:7}



static void Test_BFu15i_I_BFu7s()
{
  {
    init_simple_test("BFu15i_I_BFu7s");
    static STRUCT_IF_C BFu15i_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu7s, BFu15i_I_BFu7s)
//============================================================================


struct  BFu15i_I_BFu8c  {
  unsigned int v1:15;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_I_BFu8c) C1{ Fi:15 Fi Fc:8}



static void Test_BFu15i_I_BFu8c()
{
  {
    init_simple_test("BFu15i_I_BFu8c");
    static STRUCT_IF_C BFu15i_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu8c, BFu15i_I_BFu8c)
//============================================================================


struct  BFu15i_I_BFu8i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_I_BFu8i) C1{ Fi:15 Fi Fi:8}



static void Test_BFu15i_I_BFu8i()
{
  {
    init_simple_test("BFu15i_I_BFu8i");
    static STRUCT_IF_C BFu15i_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu8i, BFu15i_I_BFu8i)
//============================================================================


struct  BFu15i_I_BFu8ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_I_BFu8ll) C1{ Fi:15 Fi FL:8}



static void Test_BFu15i_I_BFu8ll()
{
  {
    init_simple_test("BFu15i_I_BFu8ll");
    static STRUCT_IF_C BFu15i_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu8ll, BFu15i_I_BFu8ll)
//============================================================================


struct  BFu15i_I_BFu8s  {
  unsigned int v1:15;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_I_BFu8s) C1{ Fi:15 Fi Fs:8}



static void Test_BFu15i_I_BFu8s()
{
  {
    init_simple_test("BFu15i_I_BFu8s");
    static STRUCT_IF_C BFu15i_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu8s, BFu15i_I_BFu8s)
//============================================================================


struct  BFu15i_I_BFu9i  {
  unsigned int v1:15;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_I_BFu9i) C1{ Fi:15 Fi Fi:9}



static void Test_BFu15i_I_BFu9i()
{
  {
    init_simple_test("BFu15i_I_BFu9i");
    static STRUCT_IF_C BFu15i_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu9i, BFu15i_I_BFu9i)
//============================================================================


struct  BFu15i_I_BFu9ll  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_I_BFu9ll) C1{ Fi:15 Fi FL:9}



static void Test_BFu15i_I_BFu9ll()
{
  {
    init_simple_test("BFu15i_I_BFu9ll");
    static STRUCT_IF_C BFu15i_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu9ll, BFu15i_I_BFu9ll)
//============================================================================


struct  BFu15i_I_BFu9s  {
  unsigned int v1:15;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_I_BFu9s) C1{ Fi:15 Fi Fs:9}



static void Test_BFu15i_I_BFu9s()
{
  {
    init_simple_test("BFu15i_I_BFu9s");
    static STRUCT_IF_C BFu15i_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu15i_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_BFu9s, BFu15i_I_BFu9s)
//============================================================================


struct  BFu15i_I_C  {
  unsigned int v1:15;
  int v2;
  char v3;
};
//SIG(1 BFu15i_I_C) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_I_C()
{
  {
    init_simple_test("BFu15i_I_C");
    static STRUCT_IF_C BFu15i_I_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_C");
    check_field_offset(lv, v2, 4, "BFu15i_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_C, BFu15i_I_C)
//============================================================================


struct  BFu15i_I_D  {
  unsigned int v1:15;
  int v2;
  double v3;
};
//SIG(1 BFu15i_I_D) C1{ Fi:15 Fi FL}



static void Test_BFu15i_I_D()
{
  {
    init_simple_test("BFu15i_I_D");
    static STRUCT_IF_C BFu15i_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_D");
    check_field_offset(lv, v2, 4, "BFu15i_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_D, BFu15i_I_D)
//============================================================================


struct  BFu15i_I_F  {
  unsigned int v1:15;
  int v2;
  float v3;
};
//SIG(1 BFu15i_I_F) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_I_F()
{
  {
    init_simple_test("BFu15i_I_F");
    static STRUCT_IF_C BFu15i_I_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_F");
    check_field_offset(lv, v2, 4, "BFu15i_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_F, BFu15i_I_F)
//============================================================================


struct  BFu15i_I_I  {
  unsigned int v1:15;
  int v2;
  int v3;
};
//SIG(1 BFu15i_I_I) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_I_I()
{
  {
    init_simple_test("BFu15i_I_I");
    static STRUCT_IF_C BFu15i_I_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_I");
    check_field_offset(lv, v2, 4, "BFu15i_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_I, BFu15i_I_I)
//============================================================================


struct  BFu15i_I_Ip  {
  unsigned int v1:15;
  int v2;
  int *v3;
};
//SIG(1 BFu15i_I_Ip) C1{ Fi:15 Fi Fp}



static void Test_BFu15i_I_Ip()
{
  {
    init_simple_test("BFu15i_I_Ip");
    static STRUCT_IF_C BFu15i_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_Ip");
    check_field_offset(lv, v2, 4, "BFu15i_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_Ip, BFu15i_I_Ip)
//============================================================================


struct  BFu15i_I_L  {
  unsigned int v1:15;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_I_L) C1{ Fi:15 Fi FL}



static void Test_BFu15i_I_L()
{
  {
    init_simple_test("BFu15i_I_L");
    static STRUCT_IF_C BFu15i_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_L");
    check_field_offset(lv, v2, 4, "BFu15i_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_L, BFu15i_I_L)
//============================================================================


struct  BFu15i_I_S  {
  unsigned int v1:15;
  int v2;
  short v3;
};
//SIG(1 BFu15i_I_S) C1{ Fi:15 Fi Fs}



static void Test_BFu15i_I_S()
{
  {
    init_simple_test("BFu15i_I_S");
    static STRUCT_IF_C BFu15i_I_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_S");
    check_field_offset(lv, v2, 4, "BFu15i_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_S, BFu15i_I_S)
//============================================================================


struct  BFu15i_I_Uc  {
  unsigned int v1:15;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu15i_I_Uc) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_I_Uc()
{
  {
    init_simple_test("BFu15i_I_Uc");
    static STRUCT_IF_C BFu15i_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_Uc");
    check_field_offset(lv, v2, 4, "BFu15i_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_Uc, BFu15i_I_Uc)
//============================================================================


struct  BFu15i_I_Ui  {
  unsigned int v1:15;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu15i_I_Ui) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_I_Ui()
{
  {
    init_simple_test("BFu15i_I_Ui");
    static STRUCT_IF_C BFu15i_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_Ui");
    check_field_offset(lv, v2, 4, "BFu15i_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_Ui, BFu15i_I_Ui)
//============================================================================


struct  BFu15i_I_Ul  {
  unsigned int v1:15;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_I_Ul) C1{ Fi:15 Fi FL}



static void Test_BFu15i_I_Ul()
{
  {
    init_simple_test("BFu15i_I_Ul");
    static STRUCT_IF_C BFu15i_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_Ul");
    check_field_offset(lv, v2, 4, "BFu15i_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_Ul, BFu15i_I_Ul)
//============================================================================


struct  BFu15i_I_Us  {
  unsigned int v1:15;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu15i_I_Us) C1{ Fi:15 Fi Fs}



static void Test_BFu15i_I_Us()
{
  {
    init_simple_test("BFu15i_I_Us");
    static STRUCT_IF_C BFu15i_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_Us");
    check_field_offset(lv, v2, 4, "BFu15i_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_Us, BFu15i_I_Us)
//============================================================================


struct  BFu15i_I_Vp  {
  unsigned int v1:15;
  int v2;
  void *v3;
};
//SIG(1 BFu15i_I_Vp) C1{ Fi:15 Fi Fp}



static void Test_BFu15i_I_Vp()
{
  {
    init_simple_test("BFu15i_I_Vp");
    static STRUCT_IF_C BFu15i_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_I_Vp");
    check_field_offset(lv, v2, 4, "BFu15i_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu15i_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_I_Vp, BFu15i_I_Vp)
//============================================================================


struct  BFu15i_Ip  {
  unsigned int v1:15;
  int *v2;
};
//SIG(1 BFu15i_Ip) C1{ Fi:15 Fp}



static void Test_BFu15i_Ip()
{
  {
    init_simple_test("BFu15i_Ip");
    static STRUCT_IF_C BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip, BFu15i_Ip)
//============================================================================


struct  BFu15i_Ip_BFu15i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_Ip_BFu15i) C1{ Fi:15 Fp Fi:15}



static void Test_BFu15i_Ip_BFu15i()
{
  {
    init_simple_test("BFu15i_Ip_BFu15i");
    static STRUCT_IF_C BFu15i_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu15i_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu15i, BFu15i_Ip_BFu15i)
//============================================================================


struct  BFu15i_Ip_BFu15ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_Ip_BFu15ll) C1{ Fi:15 Fp FL:15}



static void Test_BFu15i_Ip_BFu15ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu15ll");
    static STRUCT_IF_C BFu15i_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu15i_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu15ll, BFu15i_Ip_BFu15ll)
//============================================================================


struct  BFu15i_Ip_BFu15s  {
  unsigned int v1:15;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_Ip_BFu15s) C1{ Fi:15 Fp Fs:15}



static void Test_BFu15i_Ip_BFu15s()
{
  {
    init_simple_test("BFu15i_Ip_BFu15s");
    static STRUCT_IF_C BFu15i_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu15i_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu15s, BFu15i_Ip_BFu15s)
//============================================================================


struct  BFu15i_Ip_BFu16i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_Ip_BFu16i) C1{ Fi:15 Fp Fi:16}



static void Test_BFu15i_Ip_BFu16i()
{
  {
    init_simple_test("BFu15i_Ip_BFu16i");
    static STRUCT_IF_C BFu15i_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu15i_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu15i_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu16i, BFu15i_Ip_BFu16i)
//============================================================================


struct  BFu15i_Ip_BFu16ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_Ip_BFu16ll) C1{ Fi:15 Fp FL:16}



static void Test_BFu15i_Ip_BFu16ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu16ll");
    static STRUCT_IF_C BFu15i_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu15i_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu15i_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu16ll, BFu15i_Ip_BFu16ll)
//============================================================================


struct  BFu15i_Ip_BFu16s  {
  unsigned int v1:15;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_Ip_BFu16s) C1{ Fi:15 Fp Fs:16}



static void Test_BFu15i_Ip_BFu16s()
{
  {
    init_simple_test("BFu15i_Ip_BFu16s");
    static STRUCT_IF_C BFu15i_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu15i_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu15i_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu16s, BFu15i_Ip_BFu16s)
//============================================================================


struct  BFu15i_Ip_BFu17i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_Ip_BFu17i) C1{ Fi:15 Fp Fi:17}



static void Test_BFu15i_Ip_BFu17i()
{
  {
    init_simple_test("BFu15i_Ip_BFu17i");
    static STRUCT_IF_C BFu15i_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu15i_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu15i_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu17i, BFu15i_Ip_BFu17i)
//============================================================================


struct  BFu15i_Ip_BFu17ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_Ip_BFu17ll) C1{ Fi:15 Fp FL:17}



static void Test_BFu15i_Ip_BFu17ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu17ll");
    static STRUCT_IF_C BFu15i_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu15i_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu15i_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu17ll, BFu15i_Ip_BFu17ll)
//============================================================================


struct  BFu15i_Ip_BFu1c  {
  unsigned int v1:15;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_Ip_BFu1c) C1{ Fi:15 Fp Fc:1}



static void Test_BFu15i_Ip_BFu1c()
{
  {
    init_simple_test("BFu15i_Ip_BFu1c");
    static STRUCT_IF_C BFu15i_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu15i_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu1c, BFu15i_Ip_BFu1c)
//============================================================================


struct  BFu15i_Ip_BFu1i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_Ip_BFu1i) C1{ Fi:15 Fp Fi:1}



static void Test_BFu15i_Ip_BFu1i()
{
  {
    init_simple_test("BFu15i_Ip_BFu1i");
    static STRUCT_IF_C BFu15i_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu15i_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu1i, BFu15i_Ip_BFu1i)
//============================================================================


struct  BFu15i_Ip_BFu1ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_Ip_BFu1ll) C1{ Fi:15 Fp FL:1}



static void Test_BFu15i_Ip_BFu1ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu1ll");
    static STRUCT_IF_C BFu15i_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu15i_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu1ll, BFu15i_Ip_BFu1ll)
//============================================================================


struct  BFu15i_Ip_BFu1s  {
  unsigned int v1:15;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_Ip_BFu1s) C1{ Fi:15 Fp Fs:1}



static void Test_BFu15i_Ip_BFu1s()
{
  {
    init_simple_test("BFu15i_Ip_BFu1s");
    static STRUCT_IF_C BFu15i_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu15i_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu1s, BFu15i_Ip_BFu1s)
//============================================================================


struct  BFu15i_Ip_BFu31i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_Ip_BFu31i) C1{ Fi:15 Fp Fi:31}



static void Test_BFu15i_Ip_BFu31i()
{
  {
    init_simple_test("BFu15i_Ip_BFu31i");
    static STRUCT_IF_C BFu15i_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu15i_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu15i_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu31i, BFu15i_Ip_BFu31i)
//============================================================================


struct  BFu15i_Ip_BFu31ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_Ip_BFu31ll) C1{ Fi:15 Fp FL:31}



static void Test_BFu15i_Ip_BFu31ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu31ll");
    static STRUCT_IF_C BFu15i_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu15i_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu15i_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu31ll, BFu15i_Ip_BFu31ll)
//============================================================================


struct  BFu15i_Ip_BFu32i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_Ip_BFu32i) C1{ Fi:15 Fp Fi:32}



static void Test_BFu15i_Ip_BFu32i()
{
  {
    init_simple_test("BFu15i_Ip_BFu32i");
    static STRUCT_IF_C BFu15i_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu15i_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu15i_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu32i, BFu15i_Ip_BFu32i)
//============================================================================


struct  BFu15i_Ip_BFu32ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_Ip_BFu32ll) C1{ Fi:15 Fp FL:32}



static void Test_BFu15i_Ip_BFu32ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu32ll");
    static STRUCT_IF_C BFu15i_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu15i_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu15i_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu32ll, BFu15i_Ip_BFu32ll)
//============================================================================


struct  BFu15i_Ip_BFu33  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_Ip_BFu33) C1{ Fi:15 Fp FL:33}



static void Test_BFu15i_Ip_BFu33()
{
  {
    init_simple_test("BFu15i_Ip_BFu33");
    static STRUCT_IF_C BFu15i_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu15i_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu15i_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu33, BFu15i_Ip_BFu33)
//============================================================================


struct  BFu15i_Ip_BFu7c  {
  unsigned int v1:15;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_Ip_BFu7c) C1{ Fi:15 Fp Fc:7}



static void Test_BFu15i_Ip_BFu7c()
{
  {
    init_simple_test("BFu15i_Ip_BFu7c");
    static STRUCT_IF_C BFu15i_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu15i_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu15i_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu7c, BFu15i_Ip_BFu7c)
//============================================================================


struct  BFu15i_Ip_BFu7i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_Ip_BFu7i) C1{ Fi:15 Fp Fi:7}



static void Test_BFu15i_Ip_BFu7i()
{
  {
    init_simple_test("BFu15i_Ip_BFu7i");
    static STRUCT_IF_C BFu15i_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu15i_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu15i_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu7i, BFu15i_Ip_BFu7i)
//============================================================================


struct  BFu15i_Ip_BFu7ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_Ip_BFu7ll) C1{ Fi:15 Fp FL:7}



static void Test_BFu15i_Ip_BFu7ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu7ll");
    static STRUCT_IF_C BFu15i_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu15i_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu15i_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu7ll, BFu15i_Ip_BFu7ll)
//============================================================================


struct  BFu15i_Ip_BFu7s  {
  unsigned int v1:15;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_Ip_BFu7s) C1{ Fi:15 Fp Fs:7}



static void Test_BFu15i_Ip_BFu7s()
{
  {
    init_simple_test("BFu15i_Ip_BFu7s");
    static STRUCT_IF_C BFu15i_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu15i_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu15i_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu7s, BFu15i_Ip_BFu7s)
//============================================================================


struct  BFu15i_Ip_BFu8c  {
  unsigned int v1:15;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_Ip_BFu8c) C1{ Fi:15 Fp Fc:8}



static void Test_BFu15i_Ip_BFu8c()
{
  {
    init_simple_test("BFu15i_Ip_BFu8c");
    static STRUCT_IF_C BFu15i_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu15i_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu15i_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu8c, BFu15i_Ip_BFu8c)
//============================================================================


struct  BFu15i_Ip_BFu8i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_Ip_BFu8i) C1{ Fi:15 Fp Fi:8}



static void Test_BFu15i_Ip_BFu8i()
{
  {
    init_simple_test("BFu15i_Ip_BFu8i");
    static STRUCT_IF_C BFu15i_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu15i_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu15i_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu8i, BFu15i_Ip_BFu8i)
//============================================================================


struct  BFu15i_Ip_BFu8ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_Ip_BFu8ll) C1{ Fi:15 Fp FL:8}



static void Test_BFu15i_Ip_BFu8ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu8ll");
    static STRUCT_IF_C BFu15i_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu15i_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu15i_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu8ll, BFu15i_Ip_BFu8ll)
//============================================================================


struct  BFu15i_Ip_BFu8s  {
  unsigned int v1:15;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_Ip_BFu8s) C1{ Fi:15 Fp Fs:8}



static void Test_BFu15i_Ip_BFu8s()
{
  {
    init_simple_test("BFu15i_Ip_BFu8s");
    static STRUCT_IF_C BFu15i_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu15i_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu15i_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu8s, BFu15i_Ip_BFu8s)
//============================================================================


struct  BFu15i_Ip_BFu9i  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_Ip_BFu9i) C1{ Fi:15 Fp Fi:9}



static void Test_BFu15i_Ip_BFu9i()
{
  {
    init_simple_test("BFu15i_Ip_BFu9i");
    static STRUCT_IF_C BFu15i_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu15i_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu15i_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu9i, BFu15i_Ip_BFu9i)
//============================================================================


struct  BFu15i_Ip_BFu9ll  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_Ip_BFu9ll) C1{ Fi:15 Fp FL:9}



static void Test_BFu15i_Ip_BFu9ll()
{
  {
    init_simple_test("BFu15i_Ip_BFu9ll");
    static STRUCT_IF_C BFu15i_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu15i_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu15i_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu9ll, BFu15i_Ip_BFu9ll)
//============================================================================


struct  BFu15i_Ip_BFu9s  {
  unsigned int v1:15;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_Ip_BFu9s) C1{ Fi:15 Fp Fs:9}



static void Test_BFu15i_Ip_BFu9s()
{
  {
    init_simple_test("BFu15i_Ip_BFu9s");
    static STRUCT_IF_C BFu15i_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu15i_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu15i_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_BFu9s, BFu15i_Ip_BFu9s)
//============================================================================


struct  BFu15i_Ip_C  {
  unsigned int v1:15;
  int *v2;
  char v3;
};
//SIG(1 BFu15i_Ip_C) C1{ Fi:15 Fp Fc}



static void Test_BFu15i_Ip_C()
{
  {
    init_simple_test("BFu15i_Ip_C");
    static STRUCT_IF_C BFu15i_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_C, BFu15i_Ip_C)
//============================================================================


struct  BFu15i_Ip_D  {
  unsigned int v1:15;
  int *v2;
  double v3;
};
//SIG(1 BFu15i_Ip_D) C1{ Fi:15 Fp FL}



static void Test_BFu15i_Ip_D()
{
  {
    init_simple_test("BFu15i_Ip_D");
    static STRUCT_IF_C BFu15i_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_D, BFu15i_Ip_D)
//============================================================================


struct  BFu15i_Ip_F  {
  unsigned int v1:15;
  int *v2;
  float v3;
};
//SIG(1 BFu15i_Ip_F) C1{ Fi:15 Fp Fi}



static void Test_BFu15i_Ip_F()
{
  {
    init_simple_test("BFu15i_Ip_F");
    static STRUCT_IF_C BFu15i_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_F, BFu15i_Ip_F)
//============================================================================


struct  BFu15i_Ip_I  {
  unsigned int v1:15;
  int *v2;
  int v3;
};
//SIG(1 BFu15i_Ip_I) C1{ Fi:15 Fp Fi}



static void Test_BFu15i_Ip_I()
{
  {
    init_simple_test("BFu15i_Ip_I");
    static STRUCT_IF_C BFu15i_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_I, BFu15i_Ip_I)
//============================================================================


struct  BFu15i_Ip_Ip  {
  unsigned int v1:15;
  int *v2;
  int *v3;
};
//SIG(1 BFu15i_Ip_Ip) C1{ Fi:15 Fp[2]}



static void Test_BFu15i_Ip_Ip()
{
  {
    init_simple_test("BFu15i_Ip_Ip");
    static STRUCT_IF_C BFu15i_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_Ip, BFu15i_Ip_Ip)
//============================================================================


struct  BFu15i_Ip_L  {
  unsigned int v1:15;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_Ip_L) C1{ Fi:15 Fp FL}



static void Test_BFu15i_Ip_L()
{
  {
    init_simple_test("BFu15i_Ip_L");
    static STRUCT_IF_C BFu15i_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_L, BFu15i_Ip_L)
//============================================================================


struct  BFu15i_Ip_S  {
  unsigned int v1:15;
  int *v2;
  short v3;
};
//SIG(1 BFu15i_Ip_S) C1{ Fi:15 Fp Fs}



static void Test_BFu15i_Ip_S()
{
  {
    init_simple_test("BFu15i_Ip_S");
    static STRUCT_IF_C BFu15i_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_S, BFu15i_Ip_S)
//============================================================================


struct  BFu15i_Ip_Uc  {
  unsigned int v1:15;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu15i_Ip_Uc) C1{ Fi:15 Fp Fc}



static void Test_BFu15i_Ip_Uc()
{
  {
    init_simple_test("BFu15i_Ip_Uc");
    static STRUCT_IF_C BFu15i_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_Uc, BFu15i_Ip_Uc)
//============================================================================


struct  BFu15i_Ip_Ui  {
  unsigned int v1:15;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu15i_Ip_Ui) C1{ Fi:15 Fp Fi}



static void Test_BFu15i_Ip_Ui()
{
  {
    init_simple_test("BFu15i_Ip_Ui");
    static STRUCT_IF_C BFu15i_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_Ui, BFu15i_Ip_Ui)
//============================================================================


struct  BFu15i_Ip_Ul  {
  unsigned int v1:15;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_Ip_Ul) C1{ Fi:15 Fp FL}



static void Test_BFu15i_Ip_Ul()
{
  {
    init_simple_test("BFu15i_Ip_Ul");
    static STRUCT_IF_C BFu15i_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_Ul, BFu15i_Ip_Ul)
//============================================================================


struct  BFu15i_Ip_Us  {
  unsigned int v1:15;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu15i_Ip_Us) C1{ Fi:15 Fp Fs}



static void Test_BFu15i_Ip_Us()
{
  {
    init_simple_test("BFu15i_Ip_Us");
    static STRUCT_IF_C BFu15i_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_Us, BFu15i_Ip_Us)
//============================================================================


struct  BFu15i_Ip_Vp  {
  unsigned int v1:15;
  int *v2;
  void *v3;
};
//SIG(1 BFu15i_Ip_Vp) C1{ Fi:15 Fp[2]}



static void Test_BFu15i_Ip_Vp()
{
  {
    init_simple_test("BFu15i_Ip_Vp");
    static STRUCT_IF_C BFu15i_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ip_Vp, BFu15i_Ip_Vp)
//============================================================================


struct  BFu15i_L  {
  unsigned int v1:15;
  __tsi64 v2;
};
//SIG(1 BFu15i_L) C1{ Fi:15 FL}



static void Test_BFu15i_L()
{
  {
    init_simple_test("BFu15i_L");
    static STRUCT_IF_C BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L, BFu15i_L)
//============================================================================


struct  BFu15i_L_BFu15i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_L_BFu15i) C1{ Fi:15 FL Fi:15}



static void Test_BFu15i_L_BFu15i()
{
  {
    init_simple_test("BFu15i_L_BFu15i");
    static STRUCT_IF_C BFu15i_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu15i, BFu15i_L_BFu15i)
//============================================================================


struct  BFu15i_L_BFu15ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_L_BFu15ll) C1{ Fi:15 FL FL:15}



static void Test_BFu15i_L_BFu15ll()
{
  {
    init_simple_test("BFu15i_L_BFu15ll");
    static STRUCT_IF_C BFu15i_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu15ll, BFu15i_L_BFu15ll)
//============================================================================


struct  BFu15i_L_BFu15s  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_L_BFu15s) C1{ Fi:15 FL Fs:15}



static void Test_BFu15i_L_BFu15s()
{
  {
    init_simple_test("BFu15i_L_BFu15s");
    static STRUCT_IF_C BFu15i_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu15s, BFu15i_L_BFu15s)
//============================================================================


struct  BFu15i_L_BFu16i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_L_BFu16i) C1{ Fi:15 FL Fi:16}



static void Test_BFu15i_L_BFu16i()
{
  {
    init_simple_test("BFu15i_L_BFu16i");
    static STRUCT_IF_C BFu15i_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu16i, BFu15i_L_BFu16i)
//============================================================================


struct  BFu15i_L_BFu16ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_L_BFu16ll) C1{ Fi:15 FL FL:16}



static void Test_BFu15i_L_BFu16ll()
{
  {
    init_simple_test("BFu15i_L_BFu16ll");
    static STRUCT_IF_C BFu15i_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu16ll, BFu15i_L_BFu16ll)
//============================================================================


struct  BFu15i_L_BFu16s  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_L_BFu16s) C1{ Fi:15 FL Fs:16}



static void Test_BFu15i_L_BFu16s()
{
  {
    init_simple_test("BFu15i_L_BFu16s");
    static STRUCT_IF_C BFu15i_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu16s, BFu15i_L_BFu16s)
//============================================================================


struct  BFu15i_L_BFu17i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_L_BFu17i) C1{ Fi:15 FL Fi:17}



static void Test_BFu15i_L_BFu17i()
{
  {
    init_simple_test("BFu15i_L_BFu17i");
    static STRUCT_IF_C BFu15i_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu15i_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu15i_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu17i, BFu15i_L_BFu17i)
//============================================================================


struct  BFu15i_L_BFu17ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_L_BFu17ll) C1{ Fi:15 FL FL:17}



static void Test_BFu15i_L_BFu17ll()
{
  {
    init_simple_test("BFu15i_L_BFu17ll");
    static STRUCT_IF_C BFu15i_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu15i_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu15i_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu17ll, BFu15i_L_BFu17ll)
//============================================================================


struct  BFu15i_L_BFu1c  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_L_BFu1c) C1{ Fi:15 FL Fc:1}



static void Test_BFu15i_L_BFu1c()
{
  {
    init_simple_test("BFu15i_L_BFu1c");
    static STRUCT_IF_C BFu15i_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu1c, BFu15i_L_BFu1c)
//============================================================================


struct  BFu15i_L_BFu1i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_L_BFu1i) C1{ Fi:15 FL Fi:1}



static void Test_BFu15i_L_BFu1i()
{
  {
    init_simple_test("BFu15i_L_BFu1i");
    static STRUCT_IF_C BFu15i_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu1i, BFu15i_L_BFu1i)
//============================================================================


struct  BFu15i_L_BFu1ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_L_BFu1ll) C1{ Fi:15 FL FL:1}



static void Test_BFu15i_L_BFu1ll()
{
  {
    init_simple_test("BFu15i_L_BFu1ll");
    static STRUCT_IF_C BFu15i_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu1ll, BFu15i_L_BFu1ll)
//============================================================================


struct  BFu15i_L_BFu1s  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_L_BFu1s) C1{ Fi:15 FL Fs:1}



static void Test_BFu15i_L_BFu1s()
{
  {
    init_simple_test("BFu15i_L_BFu1s");
    static STRUCT_IF_C BFu15i_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu1s, BFu15i_L_BFu1s)
//============================================================================


struct  BFu15i_L_BFu31i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_L_BFu31i) C1{ Fi:15 FL Fi:31}



static void Test_BFu15i_L_BFu31i()
{
  {
    init_simple_test("BFu15i_L_BFu31i");
    static STRUCT_IF_C BFu15i_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu15i_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu15i_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu31i, BFu15i_L_BFu31i)
//============================================================================


struct  BFu15i_L_BFu31ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_L_BFu31ll) C1{ Fi:15 FL FL:31}



static void Test_BFu15i_L_BFu31ll()
{
  {
    init_simple_test("BFu15i_L_BFu31ll");
    static STRUCT_IF_C BFu15i_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu15i_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu15i_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu31ll, BFu15i_L_BFu31ll)
//============================================================================


struct  BFu15i_L_BFu32i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_L_BFu32i) C1{ Fi:15 FL Fi:32}



static void Test_BFu15i_L_BFu32i()
{
  {
    init_simple_test("BFu15i_L_BFu32i");
    static STRUCT_IF_C BFu15i_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu15i_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu15i_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu32i, BFu15i_L_BFu32i)
//============================================================================


struct  BFu15i_L_BFu32ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_L_BFu32ll) C1{ Fi:15 FL FL:32}



static void Test_BFu15i_L_BFu32ll()
{
  {
    init_simple_test("BFu15i_L_BFu32ll");
    static STRUCT_IF_C BFu15i_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu15i_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu15i_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu32ll, BFu15i_L_BFu32ll)
//============================================================================


struct  BFu15i_L_BFu33  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_L_BFu33) C1{ Fi:15 FL FL:33}



static void Test_BFu15i_L_BFu33()
{
  {
    init_simple_test("BFu15i_L_BFu33");
    static STRUCT_IF_C BFu15i_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu15i_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu15i_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu33, BFu15i_L_BFu33)
//============================================================================


struct  BFu15i_L_BFu7c  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_L_BFu7c) C1{ Fi:15 FL Fc:7}



static void Test_BFu15i_L_BFu7c()
{
  {
    init_simple_test("BFu15i_L_BFu7c");
    static STRUCT_IF_C BFu15i_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu7c, BFu15i_L_BFu7c)
//============================================================================


struct  BFu15i_L_BFu7i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_L_BFu7i) C1{ Fi:15 FL Fi:7}



static void Test_BFu15i_L_BFu7i()
{
  {
    init_simple_test("BFu15i_L_BFu7i");
    static STRUCT_IF_C BFu15i_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu7i, BFu15i_L_BFu7i)
//============================================================================


struct  BFu15i_L_BFu7ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_L_BFu7ll) C1{ Fi:15 FL FL:7}



static void Test_BFu15i_L_BFu7ll()
{
  {
    init_simple_test("BFu15i_L_BFu7ll");
    static STRUCT_IF_C BFu15i_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu7ll, BFu15i_L_BFu7ll)
//============================================================================


struct  BFu15i_L_BFu7s  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_L_BFu7s) C1{ Fi:15 FL Fs:7}



static void Test_BFu15i_L_BFu7s()
{
  {
    init_simple_test("BFu15i_L_BFu7s");
    static STRUCT_IF_C BFu15i_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu7s, BFu15i_L_BFu7s)
//============================================================================


struct  BFu15i_L_BFu8c  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_L_BFu8c) C1{ Fi:15 FL Fc:8}



static void Test_BFu15i_L_BFu8c()
{
  {
    init_simple_test("BFu15i_L_BFu8c");
    static STRUCT_IF_C BFu15i_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu8c, BFu15i_L_BFu8c)
//============================================================================


struct  BFu15i_L_BFu8i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_L_BFu8i) C1{ Fi:15 FL Fi:8}



static void Test_BFu15i_L_BFu8i()
{
  {
    init_simple_test("BFu15i_L_BFu8i");
    static STRUCT_IF_C BFu15i_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu8i, BFu15i_L_BFu8i)
//============================================================================


struct  BFu15i_L_BFu8ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_L_BFu8ll) C1{ Fi:15 FL FL:8}



static void Test_BFu15i_L_BFu8ll()
{
  {
    init_simple_test("BFu15i_L_BFu8ll");
    static STRUCT_IF_C BFu15i_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu8ll, BFu15i_L_BFu8ll)
//============================================================================


struct  BFu15i_L_BFu8s  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_L_BFu8s) C1{ Fi:15 FL Fs:8}



static void Test_BFu15i_L_BFu8s()
{
  {
    init_simple_test("BFu15i_L_BFu8s");
    static STRUCT_IF_C BFu15i_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu8s, BFu15i_L_BFu8s)
//============================================================================


struct  BFu15i_L_BFu9i  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_L_BFu9i) C1{ Fi:15 FL Fi:9}



static void Test_BFu15i_L_BFu9i()
{
  {
    init_simple_test("BFu15i_L_BFu9i");
    static STRUCT_IF_C BFu15i_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu9i, BFu15i_L_BFu9i)
//============================================================================


struct  BFu15i_L_BFu9ll  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_L_BFu9ll) C1{ Fi:15 FL FL:9}



static void Test_BFu15i_L_BFu9ll()
{
  {
    init_simple_test("BFu15i_L_BFu9ll");
    static STRUCT_IF_C BFu15i_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu9ll, BFu15i_L_BFu9ll)
//============================================================================


struct  BFu15i_L_BFu9s  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_L_BFu9s) C1{ Fi:15 FL Fs:9}



static void Test_BFu15i_L_BFu9s()
{
  {
    init_simple_test("BFu15i_L_BFu9s");
    static STRUCT_IF_C BFu15i_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_BFu9s, BFu15i_L_BFu9s)
//============================================================================


struct  BFu15i_L_C  {
  unsigned int v1:15;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu15i_L_C) C1{ Fi:15 FL Fc}



static void Test_BFu15i_L_C()
{
  {
    init_simple_test("BFu15i_L_C");
    static STRUCT_IF_C BFu15i_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_C, BFu15i_L_C)
//============================================================================


struct  BFu15i_L_D  {
  unsigned int v1:15;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu15i_L_D) C1{ Fi:15 FL[2]}



static void Test_BFu15i_L_D()
{
  {
    init_simple_test("BFu15i_L_D");
    static STRUCT_IF_C BFu15i_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_D, BFu15i_L_D)
//============================================================================


struct  BFu15i_L_F  {
  unsigned int v1:15;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu15i_L_F) C1{ Fi:15 FL Fi}



static void Test_BFu15i_L_F()
{
  {
    init_simple_test("BFu15i_L_F");
    static STRUCT_IF_C BFu15i_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_F, BFu15i_L_F)
//============================================================================


struct  BFu15i_L_I  {
  unsigned int v1:15;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu15i_L_I) C1{ Fi:15 FL Fi}



static void Test_BFu15i_L_I()
{
  {
    init_simple_test("BFu15i_L_I");
    static STRUCT_IF_C BFu15i_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_I, BFu15i_L_I)
//============================================================================


struct  BFu15i_L_Ip  {
  unsigned int v1:15;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu15i_L_Ip) C1{ Fi:15 FL Fp}



static void Test_BFu15i_L_Ip()
{
  {
    init_simple_test("BFu15i_L_Ip");
    static STRUCT_IF_C BFu15i_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_Ip, BFu15i_L_Ip)
//============================================================================


struct  BFu15i_L_L  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_L_L) C1{ Fi:15 FL[2]}



static void Test_BFu15i_L_L()
{
  {
    init_simple_test("BFu15i_L_L");
    static STRUCT_IF_C BFu15i_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_L, BFu15i_L_L)
//============================================================================


struct  BFu15i_L_S  {
  unsigned int v1:15;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu15i_L_S) C1{ Fi:15 FL Fs}



static void Test_BFu15i_L_S()
{
  {
    init_simple_test("BFu15i_L_S");
    static STRUCT_IF_C BFu15i_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_S, BFu15i_L_S)
//============================================================================


struct  BFu15i_L_Uc  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu15i_L_Uc) C1{ Fi:15 FL Fc}



static void Test_BFu15i_L_Uc()
{
  {
    init_simple_test("BFu15i_L_Uc");
    static STRUCT_IF_C BFu15i_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_Uc, BFu15i_L_Uc)
//============================================================================


struct  BFu15i_L_Ui  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu15i_L_Ui) C1{ Fi:15 FL Fi}



static void Test_BFu15i_L_Ui()
{
  {
    init_simple_test("BFu15i_L_Ui");
    static STRUCT_IF_C BFu15i_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_Ui, BFu15i_L_Ui)
//============================================================================


struct  BFu15i_L_Ul  {
  unsigned int v1:15;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_L_Ul) C1{ Fi:15 FL[2]}



static void Test_BFu15i_L_Ul()
{
  {
    init_simple_test("BFu15i_L_Ul");
    static STRUCT_IF_C BFu15i_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_Ul, BFu15i_L_Ul)
//============================================================================


struct  BFu15i_L_Us  {
  unsigned int v1:15;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu15i_L_Us) C1{ Fi:15 FL Fs}



static void Test_BFu15i_L_Us()
{
  {
    init_simple_test("BFu15i_L_Us");
    static STRUCT_IF_C BFu15i_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_Us, BFu15i_L_Us)
//============================================================================


struct  BFu15i_L_Vp  {
  unsigned int v1:15;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu15i_L_Vp) C1{ Fi:15 FL Fp}



static void Test_BFu15i_L_Vp()
{
  {
    init_simple_test("BFu15i_L_Vp");
    static STRUCT_IF_C BFu15i_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_L_Vp, BFu15i_L_Vp)
//============================================================================


struct  BFu15i_S  {
  unsigned int v1:15;
  short v2;
};
//SIG(1 BFu15i_S) C1{ Fi:15 Fs}



static void Test_BFu15i_S()
{
  {
    init_simple_test("BFu15i_S");
    static STRUCT_IF_C BFu15i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S");
    check_field_offset(lv, v2, 2, "BFu15i_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S, BFu15i_S)
//============================================================================


struct  BFu15i_S_BFu15i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_S_BFu15i) C1{ Fi:15 Fs Fi:15}



static void Test_BFu15i_S_BFu15i()
{
  {
    init_simple_test("BFu15i_S_BFu15i");
    static STRUCT_IF_C BFu15i_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu15i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu15i, BFu15i_S_BFu15i)
//============================================================================


struct  BFu15i_S_BFu15ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_S_BFu15ll) C1{ Fi:15 Fs FL:15}



static void Test_BFu15i_S_BFu15ll()
{
  {
    init_simple_test("BFu15i_S_BFu15ll");
    static STRUCT_IF_C BFu15i_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu15ll, BFu15i_S_BFu15ll)
//============================================================================


struct  BFu15i_S_BFu15s  {
  unsigned int v1:15;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_S_BFu15s) C1{ Fi:15 Fs Fs:15}



static void Test_BFu15i_S_BFu15s()
{
  {
    init_simple_test("BFu15i_S_BFu15s");
    static STRUCT_IF_C BFu15i_S_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu15s");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu15s, BFu15i_S_BFu15s)
//============================================================================


struct  BFu15i_S_BFu16i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_S_BFu16i) C1{ Fi:15 Fs Fi:16}



static void Test_BFu15i_S_BFu16i()
{
  {
    init_simple_test("BFu15i_S_BFu16i");
    static STRUCT_IF_C BFu15i_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu16i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu16i, BFu15i_S_BFu16i)
//============================================================================


struct  BFu15i_S_BFu16ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_S_BFu16ll) C1{ Fi:15 Fs FL:16}



static void Test_BFu15i_S_BFu16ll()
{
  {
    init_simple_test("BFu15i_S_BFu16ll");
    static STRUCT_IF_C BFu15i_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu16ll, BFu15i_S_BFu16ll)
//============================================================================


struct  BFu15i_S_BFu16s  {
  unsigned int v1:15;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_S_BFu16s) C1{ Fi:15 Fs Fs:16}



static void Test_BFu15i_S_BFu16s()
{
  {
    init_simple_test("BFu15i_S_BFu16s");
    static STRUCT_IF_C BFu15i_S_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu16s");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu16s, BFu15i_S_BFu16s)
//============================================================================


struct  BFu15i_S_BFu17i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_S_BFu17i) C1{ Fi:15 Fs Fi:17}



static void Test_BFu15i_S_BFu17i()
{
  {
    init_simple_test("BFu15i_S_BFu17i");
    static STRUCT_IF_C BFu15i_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu17i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu17i, BFu15i_S_BFu17i)
//============================================================================


struct  BFu15i_S_BFu17ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_S_BFu17ll) C1{ Fi:15 Fs FL:17}



static void Test_BFu15i_S_BFu17ll()
{
  {
    init_simple_test("BFu15i_S_BFu17ll");
    static STRUCT_IF_C BFu15i_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu17ll, BFu15i_S_BFu17ll)
//============================================================================


struct  BFu15i_S_BFu1c  {
  unsigned int v1:15;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_S_BFu1c) C1{ Fi:15 Fs Fc:1}



static void Test_BFu15i_S_BFu1c()
{
  {
    init_simple_test("BFu15i_S_BFu1c");
    static STRUCT_IF_C BFu15i_S_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu1c");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu1c, BFu15i_S_BFu1c)
//============================================================================


struct  BFu15i_S_BFu1i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_S_BFu1i) C1{ Fi:15 Fs Fi:1}



static void Test_BFu15i_S_BFu1i()
{
  {
    init_simple_test("BFu15i_S_BFu1i");
    static STRUCT_IF_C BFu15i_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu1i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu1i, BFu15i_S_BFu1i)
//============================================================================


struct  BFu15i_S_BFu1ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_S_BFu1ll) C1{ Fi:15 Fs FL:1}



static void Test_BFu15i_S_BFu1ll()
{
  {
    init_simple_test("BFu15i_S_BFu1ll");
    static STRUCT_IF_C BFu15i_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu1ll, BFu15i_S_BFu1ll)
//============================================================================


struct  BFu15i_S_BFu1s  {
  unsigned int v1:15;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_S_BFu1s) C1{ Fi:15 Fs Fs:1}



static void Test_BFu15i_S_BFu1s()
{
  {
    init_simple_test("BFu15i_S_BFu1s");
    static STRUCT_IF_C BFu15i_S_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu1s");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu1s, BFu15i_S_BFu1s)
//============================================================================


struct  BFu15i_S_BFu31i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_S_BFu31i) C1{ Fi:15 Fs Fi:31}



static void Test_BFu15i_S_BFu31i()
{
  {
    init_simple_test("BFu15i_S_BFu31i");
    static STRUCT_IF_C BFu15i_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu31i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu31i, BFu15i_S_BFu31i)
//============================================================================


struct  BFu15i_S_BFu31ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_S_BFu31ll) C1{ Fi:15 Fs FL:31}



static void Test_BFu15i_S_BFu31ll()
{
  {
    init_simple_test("BFu15i_S_BFu31ll");
    static STRUCT_IF_C BFu15i_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu31ll, BFu15i_S_BFu31ll)
//============================================================================


struct  BFu15i_S_BFu32i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_S_BFu32i) C1{ Fi:15 Fs Fi:32}



static void Test_BFu15i_S_BFu32i()
{
  {
    init_simple_test("BFu15i_S_BFu32i");
    static STRUCT_IF_C BFu15i_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu32i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu32i, BFu15i_S_BFu32i)
//============================================================================


struct  BFu15i_S_BFu32ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_S_BFu32ll) C1{ Fi:15 Fs FL:32}



static void Test_BFu15i_S_BFu32ll()
{
  {
    init_simple_test("BFu15i_S_BFu32ll");
    static STRUCT_IF_C BFu15i_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu32ll, BFu15i_S_BFu32ll)
//============================================================================


struct  BFu15i_S_BFu33  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_S_BFu33) C1{ Fi:15 Fs FL:33}



static void Test_BFu15i_S_BFu33()
{
  {
    init_simple_test("BFu15i_S_BFu33");
    static STRUCT_IF_C BFu15i_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu33");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu15i_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu15i_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu33, BFu15i_S_BFu33)
//============================================================================


struct  BFu15i_S_BFu7c  {
  unsigned int v1:15;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_S_BFu7c) C1{ Fi:15 Fs Fc:7}



static void Test_BFu15i_S_BFu7c()
{
  {
    init_simple_test("BFu15i_S_BFu7c");
    static STRUCT_IF_C BFu15i_S_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu7c");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu7c, BFu15i_S_BFu7c)
//============================================================================


struct  BFu15i_S_BFu7i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_S_BFu7i) C1{ Fi:15 Fs Fi:7}



static void Test_BFu15i_S_BFu7i()
{
  {
    init_simple_test("BFu15i_S_BFu7i");
    static STRUCT_IF_C BFu15i_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu7i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu7i, BFu15i_S_BFu7i)
//============================================================================


struct  BFu15i_S_BFu7ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_S_BFu7ll) C1{ Fi:15 Fs FL:7}



static void Test_BFu15i_S_BFu7ll()
{
  {
    init_simple_test("BFu15i_S_BFu7ll");
    static STRUCT_IF_C BFu15i_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu7ll, BFu15i_S_BFu7ll)
//============================================================================


struct  BFu15i_S_BFu7s  {
  unsigned int v1:15;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_S_BFu7s) C1{ Fi:15 Fs Fs:7}



static void Test_BFu15i_S_BFu7s()
{
  {
    init_simple_test("BFu15i_S_BFu7s");
    static STRUCT_IF_C BFu15i_S_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu7s");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu7s, BFu15i_S_BFu7s)
//============================================================================


struct  BFu15i_S_BFu8c  {
  unsigned int v1:15;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_S_BFu8c) C1{ Fi:15 Fs Fc:8}



static void Test_BFu15i_S_BFu8c()
{
  {
    init_simple_test("BFu15i_S_BFu8c");
    static STRUCT_IF_C BFu15i_S_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu8c");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu8c, BFu15i_S_BFu8c)
//============================================================================


struct  BFu15i_S_BFu8i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_S_BFu8i) C1{ Fi:15 Fs Fi:8}



static void Test_BFu15i_S_BFu8i()
{
  {
    init_simple_test("BFu15i_S_BFu8i");
    static STRUCT_IF_C BFu15i_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu8i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu8i, BFu15i_S_BFu8i)
//============================================================================


struct  BFu15i_S_BFu8ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_S_BFu8ll) C1{ Fi:15 Fs FL:8}



static void Test_BFu15i_S_BFu8ll()
{
  {
    init_simple_test("BFu15i_S_BFu8ll");
    static STRUCT_IF_C BFu15i_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu8ll, BFu15i_S_BFu8ll)
//============================================================================


struct  BFu15i_S_BFu8s  {
  unsigned int v1:15;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_S_BFu8s) C1{ Fi:15 Fs Fs:8}



static void Test_BFu15i_S_BFu8s()
{
  {
    init_simple_test("BFu15i_S_BFu8s");
    static STRUCT_IF_C BFu15i_S_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu8s");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu8s, BFu15i_S_BFu8s)
//============================================================================


struct  BFu15i_S_BFu9i  {
  unsigned int v1:15;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_S_BFu9i) C1{ Fi:15 Fs Fi:9}



static void Test_BFu15i_S_BFu9i()
{
  {
    init_simple_test("BFu15i_S_BFu9i");
    static STRUCT_IF_C BFu15i_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu9i");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu9i, BFu15i_S_BFu9i)
//============================================================================


struct  BFu15i_S_BFu9ll  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_S_BFu9ll) C1{ Fi:15 Fs FL:9}



static void Test_BFu15i_S_BFu9ll()
{
  {
    init_simple_test("BFu15i_S_BFu9ll");
    static STRUCT_IF_C BFu15i_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu9ll, BFu15i_S_BFu9ll)
//============================================================================


struct  BFu15i_S_BFu9s  {
  unsigned int v1:15;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_S_BFu9s) C1{ Fi:15 Fs Fs:9}



static void Test_BFu15i_S_BFu9s()
{
  {
    init_simple_test("BFu15i_S_BFu9s");
    static STRUCT_IF_C BFu15i_S_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_BFu9s");
    check_field_offset(lv, v2, 2, "BFu15i_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_BFu9s, BFu15i_S_BFu9s)
//============================================================================


struct  BFu15i_S_C  {
  unsigned int v1:15;
  short v2;
  char v3;
};
//SIG(1 BFu15i_S_C) C1{ Fi:15 Fs Fc}



static void Test_BFu15i_S_C()
{
  {
    init_simple_test("BFu15i_S_C");
    static STRUCT_IF_C BFu15i_S_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_C");
    check_field_offset(lv, v2, 2, "BFu15i_S_C.v2");
    check_field_offset(lv, v3, 4, "BFu15i_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_C, BFu15i_S_C)
//============================================================================


struct  BFu15i_S_D  {
  unsigned int v1:15;
  short v2;
  double v3;
};
//SIG(1 BFu15i_S_D) C1{ Fi:15 Fs FL}



static void Test_BFu15i_S_D()
{
  {
    init_simple_test("BFu15i_S_D");
    static STRUCT_IF_C BFu15i_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_D");
    check_field_offset(lv, v2, 2, "BFu15i_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_D, BFu15i_S_D)
//============================================================================


struct  BFu15i_S_F  {
  unsigned int v1:15;
  short v2;
  float v3;
};
//SIG(1 BFu15i_S_F) C1{ Fi:15 Fs Fi}



static void Test_BFu15i_S_F()
{
  {
    init_simple_test("BFu15i_S_F");
    static STRUCT_IF_C BFu15i_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_F");
    check_field_offset(lv, v2, 2, "BFu15i_S_F.v2");
    check_field_offset(lv, v3, 4, "BFu15i_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_F, BFu15i_S_F)
//============================================================================


struct  BFu15i_S_I  {
  unsigned int v1:15;
  short v2;
  int v3;
};
//SIG(1 BFu15i_S_I) C1{ Fi:15 Fs Fi}



static void Test_BFu15i_S_I()
{
  {
    init_simple_test("BFu15i_S_I");
    static STRUCT_IF_C BFu15i_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_I");
    check_field_offset(lv, v2, 2, "BFu15i_S_I.v2");
    check_field_offset(lv, v3, 4, "BFu15i_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_I, BFu15i_S_I)
//============================================================================


struct  BFu15i_S_Ip  {
  unsigned int v1:15;
  short v2;
  int *v3;
};
//SIG(1 BFu15i_S_Ip) C1{ Fi:15 Fs Fp}



static void Test_BFu15i_S_Ip()
{
  {
    init_simple_test("BFu15i_S_Ip");
    static STRUCT_IF_C BFu15i_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_Ip");
    check_field_offset(lv, v2, 2, "BFu15i_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_Ip, BFu15i_S_Ip)
//============================================================================


struct  BFu15i_S_L  {
  unsigned int v1:15;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_S_L) C1{ Fi:15 Fs FL}



static void Test_BFu15i_S_L()
{
  {
    init_simple_test("BFu15i_S_L");
    static STRUCT_IF_C BFu15i_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_L");
    check_field_offset(lv, v2, 2, "BFu15i_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_L, BFu15i_S_L)
//============================================================================


struct  BFu15i_S_S  {
  unsigned int v1:15;
  short v2;
  short v3;
};
//SIG(1 BFu15i_S_S) C1{ Fi:15 Fs[2]}



static void Test_BFu15i_S_S()
{
  {
    init_simple_test("BFu15i_S_S");
    static STRUCT_IF_C BFu15i_S_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_S");
    check_field_offset(lv, v2, 2, "BFu15i_S_S.v2");
    check_field_offset(lv, v3, 4, "BFu15i_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_S, BFu15i_S_S)
//============================================================================


struct  BFu15i_S_Uc  {
  unsigned int v1:15;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu15i_S_Uc) C1{ Fi:15 Fs Fc}



static void Test_BFu15i_S_Uc()
{
  {
    init_simple_test("BFu15i_S_Uc");
    static STRUCT_IF_C BFu15i_S_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_Uc");
    check_field_offset(lv, v2, 2, "BFu15i_S_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu15i_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_Uc, BFu15i_S_Uc)
//============================================================================


struct  BFu15i_S_Ui  {
  unsigned int v1:15;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu15i_S_Ui) C1{ Fi:15 Fs Fi}



static void Test_BFu15i_S_Ui()
{
  {
    init_simple_test("BFu15i_S_Ui");
    static STRUCT_IF_C BFu15i_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_Ui");
    check_field_offset(lv, v2, 2, "BFu15i_S_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu15i_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_Ui, BFu15i_S_Ui)
//============================================================================


struct  BFu15i_S_Ul  {
  unsigned int v1:15;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_S_Ul) C1{ Fi:15 Fs FL}



static void Test_BFu15i_S_Ul()
{
  {
    init_simple_test("BFu15i_S_Ul");
    static STRUCT_IF_C BFu15i_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_Ul");
    check_field_offset(lv, v2, 2, "BFu15i_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_Ul, BFu15i_S_Ul)
//============================================================================


struct  BFu15i_S_Us  {
  unsigned int v1:15;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu15i_S_Us) C1{ Fi:15 Fs[2]}



static void Test_BFu15i_S_Us()
{
  {
    init_simple_test("BFu15i_S_Us");
    static STRUCT_IF_C BFu15i_S_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_S_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_Us");
    check_field_offset(lv, v2, 2, "BFu15i_S_Us.v2");
    check_field_offset(lv, v3, 4, "BFu15i_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_Us, BFu15i_S_Us)
//============================================================================


struct  BFu15i_S_Vp  {
  unsigned int v1:15;
  short v2;
  void *v3;
};
//SIG(1 BFu15i_S_Vp) C1{ Fi:15 Fs Fp}



static void Test_BFu15i_S_Vp()
{
  {
    init_simple_test("BFu15i_S_Vp");
    static STRUCT_IF_C BFu15i_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_S_Vp");
    check_field_offset(lv, v2, 2, "BFu15i_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_S_Vp, BFu15i_S_Vp)
//============================================================================


struct  BFu15i_Uc  {
  unsigned int v1:15;
  unsigned char v2;
};
//SIG(1 BFu15i_Uc) C1{ Fi:15 Fc}



static void Test_BFu15i_Uc()
{
  {
    init_simple_test("BFu15i_Uc");
    static STRUCT_IF_C BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc");
    check_field_offset(lv, v2, 2, "BFu15i_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc, BFu15i_Uc)
//============================================================================


struct  BFu15i_Uc_BFu15i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_Uc_BFu15i) C1{ Fi:15 Fc Fi:15}



static void Test_BFu15i_Uc_BFu15i()
{
  {
    init_simple_test("BFu15i_Uc_BFu15i");
    static STRUCT_IF_C BFu15i_Uc_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu15i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_Uc_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu15i, BFu15i_Uc_BFu15i)
//============================================================================


struct  BFu15i_Uc_BFu15ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_Uc_BFu15ll) C1{ Fi:15 Fc FL:15}



static void Test_BFu15i_Uc_BFu15ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu15ll");
    static STRUCT_IF_C BFu15i_Uc_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu15i_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu15ll, BFu15i_Uc_BFu15ll)
//============================================================================


struct  BFu15i_Uc_BFu15s  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_Uc_BFu15s) C1{ Fi:15 Fc Fs:15}



static void Test_BFu15i_Uc_BFu15s()
{
  {
    init_simple_test("BFu15i_Uc_BFu15s");
    static STRUCT_IF_C BFu15i_Uc_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu15s");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_Uc_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu15s, BFu15i_Uc_BFu15s)
//============================================================================


struct  BFu15i_Uc_BFu16i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_Uc_BFu16i) C1{ Fi:15 Fc Fi:16}



static void Test_BFu15i_Uc_BFu16i()
{
  {
    init_simple_test("BFu15i_Uc_BFu16i");
    static STRUCT_IF_C BFu15i_Uc_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu16i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_Uc_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu16i, BFu15i_Uc_BFu16i)
//============================================================================


struct  BFu15i_Uc_BFu16ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_Uc_BFu16ll) C1{ Fi:15 Fc FL:16}



static void Test_BFu15i_Uc_BFu16ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu16ll");
    static STRUCT_IF_C BFu15i_Uc_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu15i_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu15i_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu16ll, BFu15i_Uc_BFu16ll)
//============================================================================


struct  BFu15i_Uc_BFu16s  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_Uc_BFu16s) C1{ Fi:15 Fc Fs:16}



static void Test_BFu15i_Uc_BFu16s()
{
  {
    init_simple_test("BFu15i_Uc_BFu16s");
    static STRUCT_IF_C BFu15i_Uc_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu16s");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_Uc_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu16s, BFu15i_Uc_BFu16s)
//============================================================================


struct  BFu15i_Uc_BFu17i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_Uc_BFu17i) C1{ Fi:15 Fc Fi:17}



static void Test_BFu15i_Uc_BFu17i()
{
  {
    init_simple_test("BFu15i_Uc_BFu17i");
    static STRUCT_IF_C BFu15i_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu17i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu17i, BFu15i_Uc_BFu17i)
//============================================================================


struct  BFu15i_Uc_BFu17ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_Uc_BFu17ll) C1{ Fi:15 Fc FL:17}



static void Test_BFu15i_Uc_BFu17ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu17ll");
    static STRUCT_IF_C BFu15i_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu15i_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu15i_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu17ll, BFu15i_Uc_BFu17ll)
//============================================================================


struct  BFu15i_Uc_BFu1c  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_Uc_BFu1c) C1{ Fi:15 Fc Fc:1}



static void Test_BFu15i_Uc_BFu1c()
{
  {
    init_simple_test("BFu15i_Uc_BFu1c");
    static STRUCT_IF_C BFu15i_Uc_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu1c");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu1c, BFu15i_Uc_BFu1c)
//============================================================================


struct  BFu15i_Uc_BFu1i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_Uc_BFu1i) C1{ Fi:15 Fc Fi:1}



static void Test_BFu15i_Uc_BFu1i()
{
  {
    init_simple_test("BFu15i_Uc_BFu1i");
    static STRUCT_IF_C BFu15i_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu1i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu1i, BFu15i_Uc_BFu1i)
//============================================================================


struct  BFu15i_Uc_BFu1ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_Uc_BFu1ll) C1{ Fi:15 Fc FL:1}



static void Test_BFu15i_Uc_BFu1ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu1ll");
    static STRUCT_IF_C BFu15i_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu1ll, BFu15i_Uc_BFu1ll)
//============================================================================


struct  BFu15i_Uc_BFu1s  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_Uc_BFu1s) C1{ Fi:15 Fc Fs:1}



static void Test_BFu15i_Uc_BFu1s()
{
  {
    init_simple_test("BFu15i_Uc_BFu1s");
    static STRUCT_IF_C BFu15i_Uc_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu1s");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu15i_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu1s, BFu15i_Uc_BFu1s)
//============================================================================


struct  BFu15i_Uc_BFu31i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_Uc_BFu31i) C1{ Fi:15 Fc Fi:31}



static void Test_BFu15i_Uc_BFu31i()
{
  {
    init_simple_test("BFu15i_Uc_BFu31i");
    static STRUCT_IF_C BFu15i_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu31i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu31i, BFu15i_Uc_BFu31i)
//============================================================================


struct  BFu15i_Uc_BFu31ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_Uc_BFu31ll) C1{ Fi:15 Fc FL:31}



static void Test_BFu15i_Uc_BFu31ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu31ll");
    static STRUCT_IF_C BFu15i_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu15i_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu15i_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu31ll, BFu15i_Uc_BFu31ll)
//============================================================================


struct  BFu15i_Uc_BFu32i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_Uc_BFu32i) C1{ Fi:15 Fc Fi:32}



static void Test_BFu15i_Uc_BFu32i()
{
  {
    init_simple_test("BFu15i_Uc_BFu32i");
    static STRUCT_IF_C BFu15i_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu32i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu32i, BFu15i_Uc_BFu32i)
//============================================================================


struct  BFu15i_Uc_BFu32ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_Uc_BFu32ll) C1{ Fi:15 Fc FL:32}



static void Test_BFu15i_Uc_BFu32ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu32ll");
    static STRUCT_IF_C BFu15i_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu15i_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu15i_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu32ll, BFu15i_Uc_BFu32ll)
//============================================================================


struct  BFu15i_Uc_BFu33  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_Uc_BFu33) C1{ Fi:15 Fc FL:33}



static void Test_BFu15i_Uc_BFu33()
{
  {
    init_simple_test("BFu15i_Uc_BFu33");
    static STRUCT_IF_C BFu15i_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu33");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu15i_Uc_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu15i_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu33, BFu15i_Uc_BFu33)
//============================================================================


struct  BFu15i_Uc_BFu7c  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_Uc_BFu7c) C1{ Fi:15 Fc Fc:7}



static void Test_BFu15i_Uc_BFu7c()
{
  {
    init_simple_test("BFu15i_Uc_BFu7c");
    static STRUCT_IF_C BFu15i_Uc_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu7c");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_Uc_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu7c, BFu15i_Uc_BFu7c)
//============================================================================


struct  BFu15i_Uc_BFu7i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_Uc_BFu7i) C1{ Fi:15 Fc Fi:7}



static void Test_BFu15i_Uc_BFu7i()
{
  {
    init_simple_test("BFu15i_Uc_BFu7i");
    static STRUCT_IF_C BFu15i_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu7i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_Uc_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu7i, BFu15i_Uc_BFu7i)
//============================================================================


struct  BFu15i_Uc_BFu7ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_Uc_BFu7ll) C1{ Fi:15 Fc FL:7}



static void Test_BFu15i_Uc_BFu7ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu7ll");
    static STRUCT_IF_C BFu15i_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu7ll, BFu15i_Uc_BFu7ll)
//============================================================================


struct  BFu15i_Uc_BFu7s  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_Uc_BFu7s) C1{ Fi:15 Fc Fs:7}



static void Test_BFu15i_Uc_BFu7s()
{
  {
    init_simple_test("BFu15i_Uc_BFu7s");
    static STRUCT_IF_C BFu15i_Uc_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu7s");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu15i_Uc_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu15i_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu7s, BFu15i_Uc_BFu7s)
//============================================================================


struct  BFu15i_Uc_BFu8c  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_Uc_BFu8c) C1{ Fi:15 Fc Fc:8}



static void Test_BFu15i_Uc_BFu8c()
{
  {
    init_simple_test("BFu15i_Uc_BFu8c");
    static STRUCT_IF_C BFu15i_Uc_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu8c");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_Uc_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu8c, BFu15i_Uc_BFu8c)
//============================================================================


struct  BFu15i_Uc_BFu8i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_Uc_BFu8i) C1{ Fi:15 Fc Fi:8}



static void Test_BFu15i_Uc_BFu8i()
{
  {
    init_simple_test("BFu15i_Uc_BFu8i");
    static STRUCT_IF_C BFu15i_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu8i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_Uc_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu8i, BFu15i_Uc_BFu8i)
//============================================================================


struct  BFu15i_Uc_BFu8ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_Uc_BFu8ll) C1{ Fi:15 Fc FL:8}



static void Test_BFu15i_Uc_BFu8ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu8ll");
    static STRUCT_IF_C BFu15i_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15i_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu8ll, BFu15i_Uc_BFu8ll)
//============================================================================


struct  BFu15i_Uc_BFu8s  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_Uc_BFu8s) C1{ Fi:15 Fc Fs:8}



static void Test_BFu15i_Uc_BFu8s()
{
  {
    init_simple_test("BFu15i_Uc_BFu8s");
    static STRUCT_IF_C BFu15i_Uc_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu8s");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu15i_Uc_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu15i_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu8s, BFu15i_Uc_BFu8s)
//============================================================================


struct  BFu15i_Uc_BFu9i  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_Uc_BFu9i) C1{ Fi:15 Fc Fi:9}



static void Test_BFu15i_Uc_BFu9i()
{
  {
    init_simple_test("BFu15i_Uc_BFu9i");
    static STRUCT_IF_C BFu15i_Uc_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu9i");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_Uc_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu9i, BFu15i_Uc_BFu9i)
//============================================================================


struct  BFu15i_Uc_BFu9ll  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_Uc_BFu9ll) C1{ Fi:15 Fc FL:9}



static void Test_BFu15i_Uc_BFu9ll()
{
  {
    init_simple_test("BFu15i_Uc_BFu9ll");
    static STRUCT_IF_C BFu15i_Uc_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu15i_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu15i_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu9ll, BFu15i_Uc_BFu9ll)
//============================================================================


struct  BFu15i_Uc_BFu9s  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_Uc_BFu9s) C1{ Fi:15 Fc Fs:9}



static void Test_BFu15i_Uc_BFu9s()
{
  {
    init_simple_test("BFu15i_Uc_BFu9s");
    static STRUCT_IF_C BFu15i_Uc_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_BFu9s");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_Uc_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_BFu9s, BFu15i_Uc_BFu9s)
//============================================================================


struct  BFu15i_Uc_C  {
  unsigned int v1:15;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu15i_Uc_C) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_Uc_C()
{
  {
    init_simple_test("BFu15i_Uc_C");
    static STRUCT_IF_C BFu15i_Uc_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_C");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_C.v2");
    check_field_offset(lv, v3, 3, "BFu15i_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_C, BFu15i_Uc_C)
//============================================================================


struct  BFu15i_Uc_D  {
  unsigned int v1:15;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu15i_Uc_D) C1{ Fi:15 Fc FL}



static void Test_BFu15i_Uc_D()
{
  {
    init_simple_test("BFu15i_Uc_D");
    static STRUCT_IF_C BFu15i_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_D");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_D, BFu15i_Uc_D)
//============================================================================


struct  BFu15i_Uc_F  {
  unsigned int v1:15;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu15i_Uc_F) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_Uc_F()
{
  {
    init_simple_test("BFu15i_Uc_F");
    static STRUCT_IF_C BFu15i_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_F");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_F, BFu15i_Uc_F)
//============================================================================


struct  BFu15i_Uc_I  {
  unsigned int v1:15;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu15i_Uc_I) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_Uc_I()
{
  {
    init_simple_test("BFu15i_Uc_I");
    static STRUCT_IF_C BFu15i_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_I");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_I, BFu15i_Uc_I)
//============================================================================


struct  BFu15i_Uc_Ip  {
  unsigned int v1:15;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu15i_Uc_Ip) C1{ Fi:15 Fc Fp}



static void Test_BFu15i_Uc_Ip()
{
  {
    init_simple_test("BFu15i_Uc_Ip");
    static STRUCT_IF_C BFu15i_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_Ip");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_Ip, BFu15i_Uc_Ip)
//============================================================================


struct  BFu15i_Uc_L  {
  unsigned int v1:15;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_Uc_L) C1{ Fi:15 Fc FL}



static void Test_BFu15i_Uc_L()
{
  {
    init_simple_test("BFu15i_Uc_L");
    static STRUCT_IF_C BFu15i_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_L");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_L, BFu15i_Uc_L)
//============================================================================


struct  BFu15i_Uc_S  {
  unsigned int v1:15;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu15i_Uc_S) C1{ Fi:15 Fc Fs}



static void Test_BFu15i_Uc_S()
{
  {
    init_simple_test("BFu15i_Uc_S");
    static STRUCT_IF_C BFu15i_Uc_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_S");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_S.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_S, BFu15i_Uc_S)
//============================================================================


struct  BFu15i_Uc_Uc  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu15i_Uc_Uc) C1{ Fi:15 Fc[2]}



static void Test_BFu15i_Uc_Uc()
{
  {
    init_simple_test("BFu15i_Uc_Uc");
    static STRUCT_IF_C BFu15i_Uc_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Uc_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_Uc");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_Uc.v2");
    check_field_offset(lv, v3, 3, "BFu15i_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_Uc, BFu15i_Uc_Uc)
//============================================================================


struct  BFu15i_Uc_Ui  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu15i_Uc_Ui) C1{ Fi:15 Fc Fi}



static void Test_BFu15i_Uc_Ui()
{
  {
    init_simple_test("BFu15i_Uc_Ui");
    static STRUCT_IF_C BFu15i_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_Ui");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_Ui, BFu15i_Uc_Ui)
//============================================================================


struct  BFu15i_Uc_Ul  {
  unsigned int v1:15;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_Uc_Ul) C1{ Fi:15 Fc FL}



static void Test_BFu15i_Uc_Ul()
{
  {
    init_simple_test("BFu15i_Uc_Ul");
    static STRUCT_IF_C BFu15i_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_Ul");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_Ul, BFu15i_Uc_Ul)
//============================================================================


struct  BFu15i_Uc_Us  {
  unsigned int v1:15;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu15i_Uc_Us) C1{ Fi:15 Fc Fs}



static void Test_BFu15i_Uc_Us()
{
  {
    init_simple_test("BFu15i_Uc_Us");
    static STRUCT_IF_C BFu15i_Uc_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Uc_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_Us");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_Us.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_Us, BFu15i_Uc_Us)
//============================================================================


struct  BFu15i_Uc_Vp  {
  unsigned int v1:15;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu15i_Uc_Vp) C1{ Fi:15 Fc Fp}



static void Test_BFu15i_Uc_Vp()
{
  {
    init_simple_test("BFu15i_Uc_Vp");
    static STRUCT_IF_C BFu15i_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Uc_Vp");
    check_field_offset(lv, v2, 2, "BFu15i_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Uc_Vp, BFu15i_Uc_Vp)
//============================================================================


struct  BFu15i_Ui  {
  unsigned int v1:15;
  unsigned int v2;
};
//SIG(1 BFu15i_Ui) C1{ Fi:15 Fi}



static void Test_BFu15i_Ui()
{
  {
    init_simple_test("BFu15i_Ui");
    static STRUCT_IF_C BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui");
    check_field_offset(lv, v2, 4, "BFu15i_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui, BFu15i_Ui)
//============================================================================


struct  BFu15i_Ui_BFu15i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_Ui_BFu15i) C1{ Fi:15 Fi Fi:15}



static void Test_BFu15i_Ui_BFu15i()
{
  {
    init_simple_test("BFu15i_Ui_BFu15i");
    static STRUCT_IF_C BFu15i_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu15i, BFu15i_Ui_BFu15i)
//============================================================================


struct  BFu15i_Ui_BFu15ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_Ui_BFu15ll) C1{ Fi:15 Fi FL:15}



static void Test_BFu15i_Ui_BFu15ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu15ll");
    static STRUCT_IF_C BFu15i_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu15ll, BFu15i_Ui_BFu15ll)
//============================================================================


struct  BFu15i_Ui_BFu15s  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_Ui_BFu15s) C1{ Fi:15 Fi Fs:15}



static void Test_BFu15i_Ui_BFu15s()
{
  {
    init_simple_test("BFu15i_Ui_BFu15s");
    static STRUCT_IF_C BFu15i_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu15i_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu15s, BFu15i_Ui_BFu15s)
//============================================================================


struct  BFu15i_Ui_BFu16i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_Ui_BFu16i) C1{ Fi:15 Fi Fi:16}



static void Test_BFu15i_Ui_BFu16i()
{
  {
    init_simple_test("BFu15i_Ui_BFu16i");
    static STRUCT_IF_C BFu15i_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu16i, BFu15i_Ui_BFu16i)
//============================================================================


struct  BFu15i_Ui_BFu16ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_Ui_BFu16ll) C1{ Fi:15 Fi FL:16}



static void Test_BFu15i_Ui_BFu16ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu16ll");
    static STRUCT_IF_C BFu15i_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu16ll, BFu15i_Ui_BFu16ll)
//============================================================================


struct  BFu15i_Ui_BFu16s  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_Ui_BFu16s) C1{ Fi:15 Fi Fs:16}



static void Test_BFu15i_Ui_BFu16s()
{
  {
    init_simple_test("BFu15i_Ui_BFu16s");
    static STRUCT_IF_C BFu15i_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu15i_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu15i_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu16s, BFu15i_Ui_BFu16s)
//============================================================================


struct  BFu15i_Ui_BFu17i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_Ui_BFu17i) C1{ Fi:15 Fi Fi:17}



static void Test_BFu15i_Ui_BFu17i()
{
  {
    init_simple_test("BFu15i_Ui_BFu17i");
    static STRUCT_IF_C BFu15i_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu17i, BFu15i_Ui_BFu17i)
//============================================================================


struct  BFu15i_Ui_BFu17ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_Ui_BFu17ll) C1{ Fi:15 Fi FL:17}



static void Test_BFu15i_Ui_BFu17ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu17ll");
    static STRUCT_IF_C BFu15i_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu15i_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu15i_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu17ll, BFu15i_Ui_BFu17ll)
//============================================================================


struct  BFu15i_Ui_BFu1c  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_Ui_BFu1c) C1{ Fi:15 Fi Fc:1}



static void Test_BFu15i_Ui_BFu1c()
{
  {
    init_simple_test("BFu15i_Ui_BFu1c");
    static STRUCT_IF_C BFu15i_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu1c, BFu15i_Ui_BFu1c)
//============================================================================


struct  BFu15i_Ui_BFu1i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_Ui_BFu1i) C1{ Fi:15 Fi Fi:1}



static void Test_BFu15i_Ui_BFu1i()
{
  {
    init_simple_test("BFu15i_Ui_BFu1i");
    static STRUCT_IF_C BFu15i_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu1i, BFu15i_Ui_BFu1i)
//============================================================================


struct  BFu15i_Ui_BFu1ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_Ui_BFu1ll) C1{ Fi:15 Fi FL:1}



static void Test_BFu15i_Ui_BFu1ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu1ll");
    static STRUCT_IF_C BFu15i_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu1ll, BFu15i_Ui_BFu1ll)
//============================================================================


struct  BFu15i_Ui_BFu1s  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_Ui_BFu1s) C1{ Fi:15 Fi Fs:1}



static void Test_BFu15i_Ui_BFu1s()
{
  {
    init_simple_test("BFu15i_Ui_BFu1s");
    static STRUCT_IF_C BFu15i_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu15i_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu1s, BFu15i_Ui_BFu1s)
//============================================================================


struct  BFu15i_Ui_BFu31i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_Ui_BFu31i) C1{ Fi:15 Fi Fi:31}



static void Test_BFu15i_Ui_BFu31i()
{
  {
    init_simple_test("BFu15i_Ui_BFu31i");
    static STRUCT_IF_C BFu15i_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu31i, BFu15i_Ui_BFu31i)
//============================================================================


struct  BFu15i_Ui_BFu31ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_Ui_BFu31ll) C1{ Fi:15 Fi FL:31}



static void Test_BFu15i_Ui_BFu31ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu31ll");
    static STRUCT_IF_C BFu15i_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu15i_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu15i_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu31ll, BFu15i_Ui_BFu31ll)
//============================================================================


struct  BFu15i_Ui_BFu32i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_Ui_BFu32i) C1{ Fi:15 Fi Fi:32}



static void Test_BFu15i_Ui_BFu32i()
{
  {
    init_simple_test("BFu15i_Ui_BFu32i");
    static STRUCT_IF_C BFu15i_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu32i, BFu15i_Ui_BFu32i)
//============================================================================


struct  BFu15i_Ui_BFu32ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_Ui_BFu32ll) C1{ Fi:15 Fi FL:32}



static void Test_BFu15i_Ui_BFu32ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu32ll");
    static STRUCT_IF_C BFu15i_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu15i_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu15i_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu32ll, BFu15i_Ui_BFu32ll)
//============================================================================


struct  BFu15i_Ui_BFu33  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_Ui_BFu33) C1{ Fi:15 Fi FL:33}



static void Test_BFu15i_Ui_BFu33()
{
  {
    init_simple_test("BFu15i_Ui_BFu33");
    static STRUCT_IF_C BFu15i_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu15i_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu15i_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu33, BFu15i_Ui_BFu33)
//============================================================================


struct  BFu15i_Ui_BFu7c  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_Ui_BFu7c) C1{ Fi:15 Fi Fc:7}



static void Test_BFu15i_Ui_BFu7c()
{
  {
    init_simple_test("BFu15i_Ui_BFu7c");
    static STRUCT_IF_C BFu15i_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu7c, BFu15i_Ui_BFu7c)
//============================================================================


struct  BFu15i_Ui_BFu7i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_Ui_BFu7i) C1{ Fi:15 Fi Fi:7}



static void Test_BFu15i_Ui_BFu7i()
{
  {
    init_simple_test("BFu15i_Ui_BFu7i");
    static STRUCT_IF_C BFu15i_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu7i, BFu15i_Ui_BFu7i)
//============================================================================


struct  BFu15i_Ui_BFu7ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_Ui_BFu7ll) C1{ Fi:15 Fi FL:7}



static void Test_BFu15i_Ui_BFu7ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu7ll");
    static STRUCT_IF_C BFu15i_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu7ll, BFu15i_Ui_BFu7ll)
//============================================================================


struct  BFu15i_Ui_BFu7s  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_Ui_BFu7s) C1{ Fi:15 Fi Fs:7}



static void Test_BFu15i_Ui_BFu7s()
{
  {
    init_simple_test("BFu15i_Ui_BFu7s");
    static STRUCT_IF_C BFu15i_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu15i_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu15i_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu7s, BFu15i_Ui_BFu7s)
//============================================================================


struct  BFu15i_Ui_BFu8c  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_Ui_BFu8c) C1{ Fi:15 Fi Fc:8}



static void Test_BFu15i_Ui_BFu8c()
{
  {
    init_simple_test("BFu15i_Ui_BFu8c");
    static STRUCT_IF_C BFu15i_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu8c, BFu15i_Ui_BFu8c)
//============================================================================


struct  BFu15i_Ui_BFu8i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_Ui_BFu8i) C1{ Fi:15 Fi Fi:8}



static void Test_BFu15i_Ui_BFu8i()
{
  {
    init_simple_test("BFu15i_Ui_BFu8i");
    static STRUCT_IF_C BFu15i_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu8i, BFu15i_Ui_BFu8i)
//============================================================================


struct  BFu15i_Ui_BFu8ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_Ui_BFu8ll) C1{ Fi:15 Fi FL:8}



static void Test_BFu15i_Ui_BFu8ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu8ll");
    static STRUCT_IF_C BFu15i_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu8ll, BFu15i_Ui_BFu8ll)
//============================================================================


struct  BFu15i_Ui_BFu8s  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_Ui_BFu8s) C1{ Fi:15 Fi Fs:8}



static void Test_BFu15i_Ui_BFu8s()
{
  {
    init_simple_test("BFu15i_Ui_BFu8s");
    static STRUCT_IF_C BFu15i_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu15i_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu15i_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu8s, BFu15i_Ui_BFu8s)
//============================================================================


struct  BFu15i_Ui_BFu9i  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_Ui_BFu9i) C1{ Fi:15 Fi Fi:9}



static void Test_BFu15i_Ui_BFu9i()
{
  {
    init_simple_test("BFu15i_Ui_BFu9i");
    static STRUCT_IF_C BFu15i_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu9i, BFu15i_Ui_BFu9i)
//============================================================================


struct  BFu15i_Ui_BFu9ll  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_Ui_BFu9ll) C1{ Fi:15 Fi FL:9}



static void Test_BFu15i_Ui_BFu9ll()
{
  {
    init_simple_test("BFu15i_Ui_BFu9ll");
    static STRUCT_IF_C BFu15i_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu9ll, BFu15i_Ui_BFu9ll)
//============================================================================


struct  BFu15i_Ui_BFu9s  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_Ui_BFu9s) C1{ Fi:15 Fi Fs:9}



static void Test_BFu15i_Ui_BFu9s()
{
  {
    init_simple_test("BFu15i_Ui_BFu9s");
    static STRUCT_IF_C BFu15i_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu15i_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu15i_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_BFu9s, BFu15i_Ui_BFu9s)
//============================================================================


struct  BFu15i_Ui_C  {
  unsigned int v1:15;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu15i_Ui_C) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_Ui_C()
{
  {
    init_simple_test("BFu15i_Ui_C");
    static STRUCT_IF_C BFu15i_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_C");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_C, BFu15i_Ui_C)
//============================================================================


struct  BFu15i_Ui_D  {
  unsigned int v1:15;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu15i_Ui_D) C1{ Fi:15 Fi FL}



static void Test_BFu15i_Ui_D()
{
  {
    init_simple_test("BFu15i_Ui_D");
    static STRUCT_IF_C BFu15i_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_D");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_D, BFu15i_Ui_D)
//============================================================================


struct  BFu15i_Ui_F  {
  unsigned int v1:15;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu15i_Ui_F) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_Ui_F()
{
  {
    init_simple_test("BFu15i_Ui_F");
    static STRUCT_IF_C BFu15i_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_F");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_F, BFu15i_Ui_F)
//============================================================================


struct  BFu15i_Ui_I  {
  unsigned int v1:15;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu15i_Ui_I) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_Ui_I()
{
  {
    init_simple_test("BFu15i_Ui_I");
    static STRUCT_IF_C BFu15i_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_I");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_I, BFu15i_Ui_I)
//============================================================================


struct  BFu15i_Ui_Ip  {
  unsigned int v1:15;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu15i_Ui_Ip) C1{ Fi:15 Fi Fp}



static void Test_BFu15i_Ui_Ip()
{
  {
    init_simple_test("BFu15i_Ui_Ip");
    static STRUCT_IF_C BFu15i_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_Ip, BFu15i_Ui_Ip)
//============================================================================


struct  BFu15i_Ui_L  {
  unsigned int v1:15;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_Ui_L) C1{ Fi:15 Fi FL}



static void Test_BFu15i_Ui_L()
{
  {
    init_simple_test("BFu15i_Ui_L");
    static STRUCT_IF_C BFu15i_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_L");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_L, BFu15i_Ui_L)
//============================================================================


struct  BFu15i_Ui_S  {
  unsigned int v1:15;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu15i_Ui_S) C1{ Fi:15 Fi Fs}



static void Test_BFu15i_Ui_S()
{
  {
    init_simple_test("BFu15i_Ui_S");
    static STRUCT_IF_C BFu15i_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_S");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_S, BFu15i_Ui_S)
//============================================================================


struct  BFu15i_Ui_Uc  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu15i_Ui_Uc) C1{ Fi:15 Fi Fc}



static void Test_BFu15i_Ui_Uc()
{
  {
    init_simple_test("BFu15i_Ui_Uc");
    static STRUCT_IF_C BFu15i_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_Uc, BFu15i_Ui_Uc)
//============================================================================


struct  BFu15i_Ui_Ui  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu15i_Ui_Ui) C1{ Fi:15 Fi[2]}



static void Test_BFu15i_Ui_Ui()
{
  {
    init_simple_test("BFu15i_Ui_Ui");
    static STRUCT_IF_C BFu15i_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_Ui, BFu15i_Ui_Ui)
//============================================================================


struct  BFu15i_Ui_Ul  {
  unsigned int v1:15;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_Ui_Ul) C1{ Fi:15 Fi FL}



static void Test_BFu15i_Ui_Ul()
{
  {
    init_simple_test("BFu15i_Ui_Ul");
    static STRUCT_IF_C BFu15i_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu15i_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_Ul, BFu15i_Ui_Ul)
//============================================================================


struct  BFu15i_Ui_Us  {
  unsigned int v1:15;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu15i_Ui_Us) C1{ Fi:15 Fi Fs}



static void Test_BFu15i_Ui_Us()
{
  {
    init_simple_test("BFu15i_Ui_Us");
    static STRUCT_IF_C BFu15i_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu15i_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_Us, BFu15i_Ui_Us)
//============================================================================


struct  BFu15i_Ui_Vp  {
  unsigned int v1:15;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu15i_Ui_Vp) C1{ Fi:15 Fi Fp}



static void Test_BFu15i_Ui_Vp()
{
  {
    init_simple_test("BFu15i_Ui_Vp");
    static STRUCT_IF_C BFu15i_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu15i_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu15i_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ui_Vp, BFu15i_Ui_Vp)
//============================================================================


struct  BFu15i_Ul  {
  unsigned int v1:15;
  __tsu64 v2;
};
//SIG(1 BFu15i_Ul) C1{ Fi:15 FL}



static void Test_BFu15i_Ul()
{
  {
    init_simple_test("BFu15i_Ul");
    static STRUCT_IF_C BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul, BFu15i_Ul)
//============================================================================


struct  BFu15i_Ul_BFu15i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_Ul_BFu15i) C1{ Fi:15 FL Fi:15}



static void Test_BFu15i_Ul_BFu15i()
{
  {
    init_simple_test("BFu15i_Ul_BFu15i");
    static STRUCT_IF_C BFu15i_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu15i, BFu15i_Ul_BFu15i)
//============================================================================


struct  BFu15i_Ul_BFu15ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_Ul_BFu15ll) C1{ Fi:15 FL FL:15}



static void Test_BFu15i_Ul_BFu15ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu15ll");
    static STRUCT_IF_C BFu15i_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu15ll, BFu15i_Ul_BFu15ll)
//============================================================================


struct  BFu15i_Ul_BFu15s  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_Ul_BFu15s) C1{ Fi:15 FL Fs:15}



static void Test_BFu15i_Ul_BFu15s()
{
  {
    init_simple_test("BFu15i_Ul_BFu15s");
    static STRUCT_IF_C BFu15i_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu15i_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu15s, BFu15i_Ul_BFu15s)
//============================================================================


struct  BFu15i_Ul_BFu16i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_Ul_BFu16i) C1{ Fi:15 FL Fi:16}



static void Test_BFu15i_Ul_BFu16i()
{
  {
    init_simple_test("BFu15i_Ul_BFu16i");
    static STRUCT_IF_C BFu15i_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu16i, BFu15i_Ul_BFu16i)
//============================================================================


struct  BFu15i_Ul_BFu16ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_Ul_BFu16ll) C1{ Fi:15 FL FL:16}



static void Test_BFu15i_Ul_BFu16ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu16ll");
    static STRUCT_IF_C BFu15i_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu16ll, BFu15i_Ul_BFu16ll)
//============================================================================


struct  BFu15i_Ul_BFu16s  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_Ul_BFu16s) C1{ Fi:15 FL Fs:16}



static void Test_BFu15i_Ul_BFu16s()
{
  {
    init_simple_test("BFu15i_Ul_BFu16s");
    static STRUCT_IF_C BFu15i_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu15i_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu15i_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu16s, BFu15i_Ul_BFu16s)
//============================================================================


struct  BFu15i_Ul_BFu17i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_Ul_BFu17i) C1{ Fi:15 FL Fi:17}



static void Test_BFu15i_Ul_BFu17i()
{
  {
    init_simple_test("BFu15i_Ul_BFu17i");
    static STRUCT_IF_C BFu15i_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu15i_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu15i_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu17i, BFu15i_Ul_BFu17i)
//============================================================================


struct  BFu15i_Ul_BFu17ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_Ul_BFu17ll) C1{ Fi:15 FL FL:17}



static void Test_BFu15i_Ul_BFu17ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu17ll");
    static STRUCT_IF_C BFu15i_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu15i_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu15i_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu17ll, BFu15i_Ul_BFu17ll)
//============================================================================


struct  BFu15i_Ul_BFu1c  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_Ul_BFu1c) C1{ Fi:15 FL Fc:1}



static void Test_BFu15i_Ul_BFu1c()
{
  {
    init_simple_test("BFu15i_Ul_BFu1c");
    static STRUCT_IF_C BFu15i_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu1c, BFu15i_Ul_BFu1c)
//============================================================================


struct  BFu15i_Ul_BFu1i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_Ul_BFu1i) C1{ Fi:15 FL Fi:1}



static void Test_BFu15i_Ul_BFu1i()
{
  {
    init_simple_test("BFu15i_Ul_BFu1i");
    static STRUCT_IF_C BFu15i_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu1i, BFu15i_Ul_BFu1i)
//============================================================================


struct  BFu15i_Ul_BFu1ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_Ul_BFu1ll) C1{ Fi:15 FL FL:1}



static void Test_BFu15i_Ul_BFu1ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu1ll");
    static STRUCT_IF_C BFu15i_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu1ll, BFu15i_Ul_BFu1ll)
//============================================================================


struct  BFu15i_Ul_BFu1s  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_Ul_BFu1s) C1{ Fi:15 FL Fs:1}



static void Test_BFu15i_Ul_BFu1s()
{
  {
    init_simple_test("BFu15i_Ul_BFu1s");
    static STRUCT_IF_C BFu15i_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu15i_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu1s, BFu15i_Ul_BFu1s)
//============================================================================


struct  BFu15i_Ul_BFu31i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_Ul_BFu31i) C1{ Fi:15 FL Fi:31}



static void Test_BFu15i_Ul_BFu31i()
{
  {
    init_simple_test("BFu15i_Ul_BFu31i");
    static STRUCT_IF_C BFu15i_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu15i_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu15i_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu31i, BFu15i_Ul_BFu31i)
//============================================================================


struct  BFu15i_Ul_BFu31ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_Ul_BFu31ll) C1{ Fi:15 FL FL:31}



static void Test_BFu15i_Ul_BFu31ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu31ll");
    static STRUCT_IF_C BFu15i_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu15i_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu15i_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu31ll, BFu15i_Ul_BFu31ll)
//============================================================================


struct  BFu15i_Ul_BFu32i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_Ul_BFu32i) C1{ Fi:15 FL Fi:32}



static void Test_BFu15i_Ul_BFu32i()
{
  {
    init_simple_test("BFu15i_Ul_BFu32i");
    static STRUCT_IF_C BFu15i_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu15i_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu15i_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu32i, BFu15i_Ul_BFu32i)
//============================================================================


struct  BFu15i_Ul_BFu32ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_Ul_BFu32ll) C1{ Fi:15 FL FL:32}



static void Test_BFu15i_Ul_BFu32ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu32ll");
    static STRUCT_IF_C BFu15i_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu15i_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu15i_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu32ll, BFu15i_Ul_BFu32ll)
//============================================================================


struct  BFu15i_Ul_BFu33  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_Ul_BFu33) C1{ Fi:15 FL FL:33}



static void Test_BFu15i_Ul_BFu33()
{
  {
    init_simple_test("BFu15i_Ul_BFu33");
    static STRUCT_IF_C BFu15i_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu15i_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu15i_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu33, BFu15i_Ul_BFu33)
//============================================================================


struct  BFu15i_Ul_BFu7c  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_Ul_BFu7c) C1{ Fi:15 FL Fc:7}



static void Test_BFu15i_Ul_BFu7c()
{
  {
    init_simple_test("BFu15i_Ul_BFu7c");
    static STRUCT_IF_C BFu15i_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu7c, BFu15i_Ul_BFu7c)
//============================================================================


struct  BFu15i_Ul_BFu7i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_Ul_BFu7i) C1{ Fi:15 FL Fi:7}



static void Test_BFu15i_Ul_BFu7i()
{
  {
    init_simple_test("BFu15i_Ul_BFu7i");
    static STRUCT_IF_C BFu15i_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu7i, BFu15i_Ul_BFu7i)
//============================================================================


struct  BFu15i_Ul_BFu7ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_Ul_BFu7ll) C1{ Fi:15 FL FL:7}



static void Test_BFu15i_Ul_BFu7ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu7ll");
    static STRUCT_IF_C BFu15i_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu7ll, BFu15i_Ul_BFu7ll)
//============================================================================


struct  BFu15i_Ul_BFu7s  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_Ul_BFu7s) C1{ Fi:15 FL Fs:7}



static void Test_BFu15i_Ul_BFu7s()
{
  {
    init_simple_test("BFu15i_Ul_BFu7s");
    static STRUCT_IF_C BFu15i_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu15i_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu15i_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu7s, BFu15i_Ul_BFu7s)
//============================================================================


struct  BFu15i_Ul_BFu8c  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_Ul_BFu8c) C1{ Fi:15 FL Fc:8}



static void Test_BFu15i_Ul_BFu8c()
{
  {
    init_simple_test("BFu15i_Ul_BFu8c");
    static STRUCT_IF_C BFu15i_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu8c, BFu15i_Ul_BFu8c)
//============================================================================


struct  BFu15i_Ul_BFu8i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_Ul_BFu8i) C1{ Fi:15 FL Fi:8}



static void Test_BFu15i_Ul_BFu8i()
{
  {
    init_simple_test("BFu15i_Ul_BFu8i");
    static STRUCT_IF_C BFu15i_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu8i, BFu15i_Ul_BFu8i)
//============================================================================


struct  BFu15i_Ul_BFu8ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_Ul_BFu8ll) C1{ Fi:15 FL FL:8}



static void Test_BFu15i_Ul_BFu8ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu8ll");
    static STRUCT_IF_C BFu15i_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu8ll, BFu15i_Ul_BFu8ll)
//============================================================================


struct  BFu15i_Ul_BFu8s  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_Ul_BFu8s) C1{ Fi:15 FL Fs:8}



static void Test_BFu15i_Ul_BFu8s()
{
  {
    init_simple_test("BFu15i_Ul_BFu8s");
    static STRUCT_IF_C BFu15i_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu15i_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu15i_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu8s, BFu15i_Ul_BFu8s)
//============================================================================


struct  BFu15i_Ul_BFu9i  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_Ul_BFu9i) C1{ Fi:15 FL Fi:9}



static void Test_BFu15i_Ul_BFu9i()
{
  {
    init_simple_test("BFu15i_Ul_BFu9i");
    static STRUCT_IF_C BFu15i_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu9i, BFu15i_Ul_BFu9i)
//============================================================================


struct  BFu15i_Ul_BFu9ll  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_Ul_BFu9ll) C1{ Fi:15 FL FL:9}



static void Test_BFu15i_Ul_BFu9ll()
{
  {
    init_simple_test("BFu15i_Ul_BFu9ll");
    static STRUCT_IF_C BFu15i_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu9ll, BFu15i_Ul_BFu9ll)
//============================================================================


struct  BFu15i_Ul_BFu9s  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_Ul_BFu9s) C1{ Fi:15 FL Fs:9}



static void Test_BFu15i_Ul_BFu9s()
{
  {
    init_simple_test("BFu15i_Ul_BFu9s");
    static STRUCT_IF_C BFu15i_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu15i_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu15i_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_BFu9s, BFu15i_Ul_BFu9s)
//============================================================================


struct  BFu15i_Ul_C  {
  unsigned int v1:15;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu15i_Ul_C) C1{ Fi:15 FL Fc}



static void Test_BFu15i_Ul_C()
{
  {
    init_simple_test("BFu15i_Ul_C");
    static STRUCT_IF_C BFu15i_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_C, BFu15i_Ul_C)
//============================================================================


struct  BFu15i_Ul_D  {
  unsigned int v1:15;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu15i_Ul_D) C1{ Fi:15 FL[2]}



static void Test_BFu15i_Ul_D()
{
  {
    init_simple_test("BFu15i_Ul_D");
    static STRUCT_IF_C BFu15i_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_D, BFu15i_Ul_D)
//============================================================================


struct  BFu15i_Ul_F  {
  unsigned int v1:15;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu15i_Ul_F) C1{ Fi:15 FL Fi}



static void Test_BFu15i_Ul_F()
{
  {
    init_simple_test("BFu15i_Ul_F");
    static STRUCT_IF_C BFu15i_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_F, BFu15i_Ul_F)
//============================================================================


struct  BFu15i_Ul_I  {
  unsigned int v1:15;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu15i_Ul_I) C1{ Fi:15 FL Fi}



static void Test_BFu15i_Ul_I()
{
  {
    init_simple_test("BFu15i_Ul_I");
    static STRUCT_IF_C BFu15i_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_I, BFu15i_Ul_I)
//============================================================================


struct  BFu15i_Ul_Ip  {
  unsigned int v1:15;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu15i_Ul_Ip) C1{ Fi:15 FL Fp}



static void Test_BFu15i_Ul_Ip()
{
  {
    init_simple_test("BFu15i_Ul_Ip");
    static STRUCT_IF_C BFu15i_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_Ip, BFu15i_Ul_Ip)
//============================================================================


struct  BFu15i_Ul_L  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_Ul_L) C1{ Fi:15 FL[2]}



static void Test_BFu15i_Ul_L()
{
  {
    init_simple_test("BFu15i_Ul_L");
    static STRUCT_IF_C BFu15i_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_L, BFu15i_Ul_L)
//============================================================================


struct  BFu15i_Ul_S  {
  unsigned int v1:15;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu15i_Ul_S) C1{ Fi:15 FL Fs}



static void Test_BFu15i_Ul_S()
{
  {
    init_simple_test("BFu15i_Ul_S");
    static STRUCT_IF_C BFu15i_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_S, BFu15i_Ul_S)
//============================================================================


struct  BFu15i_Ul_Uc  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu15i_Ul_Uc) C1{ Fi:15 FL Fc}



static void Test_BFu15i_Ul_Uc()
{
  {
    init_simple_test("BFu15i_Ul_Uc");
    static STRUCT_IF_C BFu15i_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_Uc, BFu15i_Ul_Uc)
//============================================================================


struct  BFu15i_Ul_Ui  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu15i_Ul_Ui) C1{ Fi:15 FL Fi}



static void Test_BFu15i_Ul_Ui()
{
  {
    init_simple_test("BFu15i_Ul_Ui");
    static STRUCT_IF_C BFu15i_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_Ui, BFu15i_Ul_Ui)
//============================================================================


struct  BFu15i_Ul_Ul  {
  unsigned int v1:15;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_Ul_Ul) C1{ Fi:15 FL[2]}



static void Test_BFu15i_Ul_Ul()
{
  {
    init_simple_test("BFu15i_Ul_Ul");
    static STRUCT_IF_C BFu15i_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu15i_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_Ul, BFu15i_Ul_Ul)
//============================================================================


struct  BFu15i_Ul_Us  {
  unsigned int v1:15;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu15i_Ul_Us) C1{ Fi:15 FL Fs}



static void Test_BFu15i_Ul_Us()
{
  {
    init_simple_test("BFu15i_Ul_Us");
    static STRUCT_IF_C BFu15i_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_Us, BFu15i_Ul_Us)
//============================================================================


struct  BFu15i_Ul_Vp  {
  unsigned int v1:15;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu15i_Ul_Vp) C1{ Fi:15 FL Fp}



static void Test_BFu15i_Ul_Vp()
{
  {
    init_simple_test("BFu15i_Ul_Vp");
    static STRUCT_IF_C BFu15i_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu15i_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Ul_Vp, BFu15i_Ul_Vp)
//============================================================================


struct  BFu15i_Us  {
  unsigned int v1:15;
  unsigned short v2;
};
//SIG(1 BFu15i_Us) C1{ Fi:15 Fs}



static void Test_BFu15i_Us()
{
  {
    init_simple_test("BFu15i_Us");
    static STRUCT_IF_C BFu15i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us");
    check_field_offset(lv, v2, 2, "BFu15i_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us, BFu15i_Us)
//============================================================================


struct  BFu15i_Us_BFu15i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_Us_BFu15i) C1{ Fi:15 Fs Fi:15}



static void Test_BFu15i_Us_BFu15i()
{
  {
    init_simple_test("BFu15i_Us_BFu15i");
    static STRUCT_IF_C BFu15i_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu15i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu15i, BFu15i_Us_BFu15i)
//============================================================================


struct  BFu15i_Us_BFu15ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_Us_BFu15ll) C1{ Fi:15 Fs FL:15}



static void Test_BFu15i_Us_BFu15ll()
{
  {
    init_simple_test("BFu15i_Us_BFu15ll");
    static STRUCT_IF_C BFu15i_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu15ll, BFu15i_Us_BFu15ll)
//============================================================================


struct  BFu15i_Us_BFu15s  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_Us_BFu15s) C1{ Fi:15 Fs Fs:15}



static void Test_BFu15i_Us_BFu15s()
{
  {
    init_simple_test("BFu15i_Us_BFu15s");
    static STRUCT_IF_C BFu15i_Us_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu15s");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15i_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu15s, BFu15i_Us_BFu15s)
//============================================================================


struct  BFu15i_Us_BFu16i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_Us_BFu16i) C1{ Fi:15 Fs Fi:16}



static void Test_BFu15i_Us_BFu16i()
{
  {
    init_simple_test("BFu15i_Us_BFu16i");
    static STRUCT_IF_C BFu15i_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu16i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu16i, BFu15i_Us_BFu16i)
//============================================================================


struct  BFu15i_Us_BFu16ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_Us_BFu16ll) C1{ Fi:15 Fs FL:16}



static void Test_BFu15i_Us_BFu16ll()
{
  {
    init_simple_test("BFu15i_Us_BFu16ll");
    static STRUCT_IF_C BFu15i_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu16ll, BFu15i_Us_BFu16ll)
//============================================================================


struct  BFu15i_Us_BFu16s  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_Us_BFu16s) C1{ Fi:15 Fs Fs:16}



static void Test_BFu15i_Us_BFu16s()
{
  {
    init_simple_test("BFu15i_Us_BFu16s");
    static STRUCT_IF_C BFu15i_Us_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu16s");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15i_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15i_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu16s, BFu15i_Us_BFu16s)
//============================================================================


struct  BFu15i_Us_BFu17i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_Us_BFu17i) C1{ Fi:15 Fs Fi:17}



static void Test_BFu15i_Us_BFu17i()
{
  {
    init_simple_test("BFu15i_Us_BFu17i");
    static STRUCT_IF_C BFu15i_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu17i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu17i, BFu15i_Us_BFu17i)
//============================================================================


struct  BFu15i_Us_BFu17ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_Us_BFu17ll) C1{ Fi:15 Fs FL:17}



static void Test_BFu15i_Us_BFu17ll()
{
  {
    init_simple_test("BFu15i_Us_BFu17ll");
    static STRUCT_IF_C BFu15i_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15i_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15i_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu17ll, BFu15i_Us_BFu17ll)
//============================================================================


struct  BFu15i_Us_BFu1c  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_Us_BFu1c) C1{ Fi:15 Fs Fc:1}



static void Test_BFu15i_Us_BFu1c()
{
  {
    init_simple_test("BFu15i_Us_BFu1c");
    static STRUCT_IF_C BFu15i_Us_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu1c");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu1c, BFu15i_Us_BFu1c)
//============================================================================


struct  BFu15i_Us_BFu1i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_Us_BFu1i) C1{ Fi:15 Fs Fi:1}



static void Test_BFu15i_Us_BFu1i()
{
  {
    init_simple_test("BFu15i_Us_BFu1i");
    static STRUCT_IF_C BFu15i_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu1i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu1i, BFu15i_Us_BFu1i)
//============================================================================


struct  BFu15i_Us_BFu1ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_Us_BFu1ll) C1{ Fi:15 Fs FL:1}



static void Test_BFu15i_Us_BFu1ll()
{
  {
    init_simple_test("BFu15i_Us_BFu1ll");
    static STRUCT_IF_C BFu15i_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu1ll, BFu15i_Us_BFu1ll)
//============================================================================


struct  BFu15i_Us_BFu1s  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_Us_BFu1s) C1{ Fi:15 Fs Fs:1}



static void Test_BFu15i_Us_BFu1s()
{
  {
    init_simple_test("BFu15i_Us_BFu1s");
    static STRUCT_IF_C BFu15i_Us_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu1s");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu15i_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu1s, BFu15i_Us_BFu1s)
//============================================================================


struct  BFu15i_Us_BFu31i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_Us_BFu31i) C1{ Fi:15 Fs Fi:31}



static void Test_BFu15i_Us_BFu31i()
{
  {
    init_simple_test("BFu15i_Us_BFu31i");
    static STRUCT_IF_C BFu15i_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu31i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu31i, BFu15i_Us_BFu31i)
//============================================================================


struct  BFu15i_Us_BFu31ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_Us_BFu31ll) C1{ Fi:15 Fs FL:31}



static void Test_BFu15i_Us_BFu31ll()
{
  {
    init_simple_test("BFu15i_Us_BFu31ll");
    static STRUCT_IF_C BFu15i_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15i_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15i_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu31ll, BFu15i_Us_BFu31ll)
//============================================================================


struct  BFu15i_Us_BFu32i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_Us_BFu32i) C1{ Fi:15 Fs Fi:32}



static void Test_BFu15i_Us_BFu32i()
{
  {
    init_simple_test("BFu15i_Us_BFu32i");
    static STRUCT_IF_C BFu15i_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu32i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu32i, BFu15i_Us_BFu32i)
//============================================================================


struct  BFu15i_Us_BFu32ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_Us_BFu32ll) C1{ Fi:15 Fs FL:32}



static void Test_BFu15i_Us_BFu32ll()
{
  {
    init_simple_test("BFu15i_Us_BFu32ll");
    static STRUCT_IF_C BFu15i_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15i_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15i_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu32ll, BFu15i_Us_BFu32ll)
//============================================================================


struct  BFu15i_Us_BFu33  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_Us_BFu33) C1{ Fi:15 Fs FL:33}



static void Test_BFu15i_Us_BFu33()
{
  {
    init_simple_test("BFu15i_Us_BFu33");
    static STRUCT_IF_C BFu15i_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu33");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu15i_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu15i_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu33, BFu15i_Us_BFu33)
//============================================================================


struct  BFu15i_Us_BFu7c  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_Us_BFu7c) C1{ Fi:15 Fs Fc:7}



static void Test_BFu15i_Us_BFu7c()
{
  {
    init_simple_test("BFu15i_Us_BFu7c");
    static STRUCT_IF_C BFu15i_Us_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu7c");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu7c, BFu15i_Us_BFu7c)
//============================================================================


struct  BFu15i_Us_BFu7i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_Us_BFu7i) C1{ Fi:15 Fs Fi:7}



static void Test_BFu15i_Us_BFu7i()
{
  {
    init_simple_test("BFu15i_Us_BFu7i");
    static STRUCT_IF_C BFu15i_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu7i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu7i, BFu15i_Us_BFu7i)
//============================================================================


struct  BFu15i_Us_BFu7ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_Us_BFu7ll) C1{ Fi:15 Fs FL:7}



static void Test_BFu15i_Us_BFu7ll()
{
  {
    init_simple_test("BFu15i_Us_BFu7ll");
    static STRUCT_IF_C BFu15i_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu7ll, BFu15i_Us_BFu7ll)
//============================================================================


struct  BFu15i_Us_BFu7s  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_Us_BFu7s) C1{ Fi:15 Fs Fs:7}



static void Test_BFu15i_Us_BFu7s()
{
  {
    init_simple_test("BFu15i_Us_BFu7s");
    static STRUCT_IF_C BFu15i_Us_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu7s");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15i_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15i_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu7s, BFu15i_Us_BFu7s)
//============================================================================


struct  BFu15i_Us_BFu8c  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_Us_BFu8c) C1{ Fi:15 Fs Fc:8}



static void Test_BFu15i_Us_BFu8c()
{
  {
    init_simple_test("BFu15i_Us_BFu8c");
    static STRUCT_IF_C BFu15i_Us_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu8c");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu8c, BFu15i_Us_BFu8c)
//============================================================================


struct  BFu15i_Us_BFu8i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_Us_BFu8i) C1{ Fi:15 Fs Fi:8}



static void Test_BFu15i_Us_BFu8i()
{
  {
    init_simple_test("BFu15i_Us_BFu8i");
    static STRUCT_IF_C BFu15i_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu8i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu8i, BFu15i_Us_BFu8i)
//============================================================================


struct  BFu15i_Us_BFu8ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_Us_BFu8ll) C1{ Fi:15 Fs FL:8}



static void Test_BFu15i_Us_BFu8ll()
{
  {
    init_simple_test("BFu15i_Us_BFu8ll");
    static STRUCT_IF_C BFu15i_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu8ll, BFu15i_Us_BFu8ll)
//============================================================================


struct  BFu15i_Us_BFu8s  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_Us_BFu8s) C1{ Fi:15 Fs Fs:8}



static void Test_BFu15i_Us_BFu8s()
{
  {
    init_simple_test("BFu15i_Us_BFu8s");
    static STRUCT_IF_C BFu15i_Us_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu8s");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15i_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15i_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu8s, BFu15i_Us_BFu8s)
//============================================================================


struct  BFu15i_Us_BFu9i  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_Us_BFu9i) C1{ Fi:15 Fs Fi:9}



static void Test_BFu15i_Us_BFu9i()
{
  {
    init_simple_test("BFu15i_Us_BFu9i");
    static STRUCT_IF_C BFu15i_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu9i");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu9i, BFu15i_Us_BFu9i)
//============================================================================


struct  BFu15i_Us_BFu9ll  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_Us_BFu9ll) C1{ Fi:15 Fs FL:9}



static void Test_BFu15i_Us_BFu9ll()
{
  {
    init_simple_test("BFu15i_Us_BFu9ll");
    static STRUCT_IF_C BFu15i_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu9ll, BFu15i_Us_BFu9ll)
//============================================================================


struct  BFu15i_Us_BFu9s  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_Us_BFu9s) C1{ Fi:15 Fs Fs:9}



static void Test_BFu15i_Us_BFu9s()
{
  {
    init_simple_test("BFu15i_Us_BFu9s");
    static STRUCT_IF_C BFu15i_Us_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_BFu9s");
    check_field_offset(lv, v2, 2, "BFu15i_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15i_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15i_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_BFu9s, BFu15i_Us_BFu9s)
//============================================================================


struct  BFu15i_Us_C  {
  unsigned int v1:15;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu15i_Us_C) C1{ Fi:15 Fs Fc}



static void Test_BFu15i_Us_C()
{
  {
    init_simple_test("BFu15i_Us_C");
    static STRUCT_IF_C BFu15i_Us_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_C");
    check_field_offset(lv, v2, 2, "BFu15i_Us_C.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_C, BFu15i_Us_C)
//============================================================================


struct  BFu15i_Us_D  {
  unsigned int v1:15;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu15i_Us_D) C1{ Fi:15 Fs FL}



static void Test_BFu15i_Us_D()
{
  {
    init_simple_test("BFu15i_Us_D");
    static STRUCT_IF_C BFu15i_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_D");
    check_field_offset(lv, v2, 2, "BFu15i_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_D, BFu15i_Us_D)
//============================================================================


struct  BFu15i_Us_F  {
  unsigned int v1:15;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu15i_Us_F) C1{ Fi:15 Fs Fi}



static void Test_BFu15i_Us_F()
{
  {
    init_simple_test("BFu15i_Us_F");
    static STRUCT_IF_C BFu15i_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_F");
    check_field_offset(lv, v2, 2, "BFu15i_Us_F.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_F, BFu15i_Us_F)
//============================================================================


struct  BFu15i_Us_I  {
  unsigned int v1:15;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu15i_Us_I) C1{ Fi:15 Fs Fi}



static void Test_BFu15i_Us_I()
{
  {
    init_simple_test("BFu15i_Us_I");
    static STRUCT_IF_C BFu15i_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_I");
    check_field_offset(lv, v2, 2, "BFu15i_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_I, BFu15i_Us_I)
//============================================================================


struct  BFu15i_Us_Ip  {
  unsigned int v1:15;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu15i_Us_Ip) C1{ Fi:15 Fs Fp}



static void Test_BFu15i_Us_Ip()
{
  {
    init_simple_test("BFu15i_Us_Ip");
    static STRUCT_IF_C BFu15i_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu15i_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_Ip, BFu15i_Us_Ip)
//============================================================================


struct  BFu15i_Us_L  {
  unsigned int v1:15;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_Us_L) C1{ Fi:15 Fs FL}



static void Test_BFu15i_Us_L()
{
  {
    init_simple_test("BFu15i_Us_L");
    static STRUCT_IF_C BFu15i_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_L");
    check_field_offset(lv, v2, 2, "BFu15i_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_L, BFu15i_Us_L)
//============================================================================


struct  BFu15i_Us_S  {
  unsigned int v1:15;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu15i_Us_S) C1{ Fi:15 Fs[2]}



static void Test_BFu15i_Us_S()
{
  {
    init_simple_test("BFu15i_Us_S");
    static STRUCT_IF_C BFu15i_Us_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_S");
    check_field_offset(lv, v2, 2, "BFu15i_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_S, BFu15i_Us_S)
//============================================================================


struct  BFu15i_Us_Uc  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu15i_Us_Uc) C1{ Fi:15 Fs Fc}



static void Test_BFu15i_Us_Uc()
{
  {
    init_simple_test("BFu15i_Us_Uc");
    static STRUCT_IF_C BFu15i_Us_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu15i_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_Uc, BFu15i_Us_Uc)
//============================================================================


struct  BFu15i_Us_Ui  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu15i_Us_Ui) C1{ Fi:15 Fs Fi}



static void Test_BFu15i_Us_Ui()
{
  {
    init_simple_test("BFu15i_Us_Ui");
    static STRUCT_IF_C BFu15i_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu15i_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_Ui, BFu15i_Us_Ui)
//============================================================================


struct  BFu15i_Us_Ul  {
  unsigned int v1:15;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_Us_Ul) C1{ Fi:15 Fs FL}



static void Test_BFu15i_Us_Ul()
{
  {
    init_simple_test("BFu15i_Us_Ul");
    static STRUCT_IF_C BFu15i_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15i_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu15i_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_Ul, BFu15i_Us_Ul)
//============================================================================


struct  BFu15i_Us_Us  {
  unsigned int v1:15;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu15i_Us_Us) C1{ Fi:15 Fs[2]}



static void Test_BFu15i_Us_Us()
{
  {
    init_simple_test("BFu15i_Us_Us");
    static STRUCT_IF_C BFu15i_Us_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15i_Us_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu15i_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_Us");
    check_field_offset(lv, v2, 2, "BFu15i_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu15i_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_Us, BFu15i_Us_Us)
//============================================================================


struct  BFu15i_Us_Vp  {
  unsigned int v1:15;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu15i_Us_Vp) C1{ Fi:15 Fs Fp}



static void Test_BFu15i_Us_Vp()
{
  {
    init_simple_test("BFu15i_Us_Vp");
    static STRUCT_IF_C BFu15i_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu15i_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15i_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Us_Vp, BFu15i_Us_Vp)
//============================================================================


struct  BFu15i_Vp  {
  unsigned int v1:15;
  void *v2;
};
//SIG(1 BFu15i_Vp) C1{ Fi:15 Fp}



static void Test_BFu15i_Vp()
{
  {
    init_simple_test("BFu15i_Vp");
    static STRUCT_IF_C BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp, BFu15i_Vp)
//============================================================================


struct  BFu15i_Vp_BFu15i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu15i_Vp_BFu15i) C1{ Fi:15 Fp Fi:15}



static void Test_BFu15i_Vp_BFu15i()
{
  {
    init_simple_test("BFu15i_Vp_BFu15i");
    static STRUCT_IF_C BFu15i_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu15i_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu15i, BFu15i_Vp_BFu15i)
//============================================================================


struct  BFu15i_Vp_BFu15ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu15i_Vp_BFu15ll) C1{ Fi:15 Fp FL:15}



static void Test_BFu15i_Vp_BFu15ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu15ll");
    static STRUCT_IF_C BFu15i_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu15i_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu15ll, BFu15i_Vp_BFu15ll)
//============================================================================


struct  BFu15i_Vp_BFu15s  {
  unsigned int v1:15;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu15i_Vp_BFu15s) C1{ Fi:15 Fp Fs:15}



static void Test_BFu15i_Vp_BFu15s()
{
  {
    init_simple_test("BFu15i_Vp_BFu15s");
    static STRUCT_IF_C BFu15i_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu15i_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu15s, BFu15i_Vp_BFu15s)
//============================================================================


struct  BFu15i_Vp_BFu16i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu15i_Vp_BFu16i) C1{ Fi:15 Fp Fi:16}



static void Test_BFu15i_Vp_BFu16i()
{
  {
    init_simple_test("BFu15i_Vp_BFu16i");
    static STRUCT_IF_C BFu15i_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu15i_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu15i_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu16i, BFu15i_Vp_BFu16i)
//============================================================================


struct  BFu15i_Vp_BFu16ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu15i_Vp_BFu16ll) C1{ Fi:15 Fp FL:16}



static void Test_BFu15i_Vp_BFu16ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu16ll");
    static STRUCT_IF_C BFu15i_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu15i_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu15i_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu16ll, BFu15i_Vp_BFu16ll)
//============================================================================


struct  BFu15i_Vp_BFu16s  {
  unsigned int v1:15;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu15i_Vp_BFu16s) C1{ Fi:15 Fp Fs:16}



static void Test_BFu15i_Vp_BFu16s()
{
  {
    init_simple_test("BFu15i_Vp_BFu16s");
    static STRUCT_IF_C BFu15i_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu15i_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu15i_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu16s, BFu15i_Vp_BFu16s)
//============================================================================


struct  BFu15i_Vp_BFu17i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu15i_Vp_BFu17i) C1{ Fi:15 Fp Fi:17}



static void Test_BFu15i_Vp_BFu17i()
{
  {
    init_simple_test("BFu15i_Vp_BFu17i");
    static STRUCT_IF_C BFu15i_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu15i_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu15i_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu17i, BFu15i_Vp_BFu17i)
//============================================================================


struct  BFu15i_Vp_BFu17ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu15i_Vp_BFu17ll) C1{ Fi:15 Fp FL:17}



static void Test_BFu15i_Vp_BFu17ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu17ll");
    static STRUCT_IF_C BFu15i_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu15i_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu15i_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu17ll, BFu15i_Vp_BFu17ll)
//============================================================================


struct  BFu15i_Vp_BFu1c  {
  unsigned int v1:15;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu15i_Vp_BFu1c) C1{ Fi:15 Fp Fc:1}



static void Test_BFu15i_Vp_BFu1c()
{
  {
    init_simple_test("BFu15i_Vp_BFu1c");
    static STRUCT_IF_C BFu15i_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu15i_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu1c, BFu15i_Vp_BFu1c)
//============================================================================


struct  BFu15i_Vp_BFu1i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu15i_Vp_BFu1i) C1{ Fi:15 Fp Fi:1}



static void Test_BFu15i_Vp_BFu1i()
{
  {
    init_simple_test("BFu15i_Vp_BFu1i");
    static STRUCT_IF_C BFu15i_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu15i_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu1i, BFu15i_Vp_BFu1i)
//============================================================================


struct  BFu15i_Vp_BFu1ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu15i_Vp_BFu1ll) C1{ Fi:15 Fp FL:1}



static void Test_BFu15i_Vp_BFu1ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu1ll");
    static STRUCT_IF_C BFu15i_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu15i_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu1ll, BFu15i_Vp_BFu1ll)
//============================================================================


struct  BFu15i_Vp_BFu1s  {
  unsigned int v1:15;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu15i_Vp_BFu1s) C1{ Fi:15 Fp Fs:1}



static void Test_BFu15i_Vp_BFu1s()
{
  {
    init_simple_test("BFu15i_Vp_BFu1s");
    static STRUCT_IF_C BFu15i_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu15i_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu1s, BFu15i_Vp_BFu1s)
//============================================================================


struct  BFu15i_Vp_BFu31i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu15i_Vp_BFu31i) C1{ Fi:15 Fp Fi:31}



static void Test_BFu15i_Vp_BFu31i()
{
  {
    init_simple_test("BFu15i_Vp_BFu31i");
    static STRUCT_IF_C BFu15i_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu15i_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu15i_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu31i, BFu15i_Vp_BFu31i)
//============================================================================


struct  BFu15i_Vp_BFu31ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu15i_Vp_BFu31ll) C1{ Fi:15 Fp FL:31}



static void Test_BFu15i_Vp_BFu31ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu31ll");
    static STRUCT_IF_C BFu15i_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu15i_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu15i_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu31ll, BFu15i_Vp_BFu31ll)
//============================================================================


struct  BFu15i_Vp_BFu32i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu15i_Vp_BFu32i) C1{ Fi:15 Fp Fi:32}



static void Test_BFu15i_Vp_BFu32i()
{
  {
    init_simple_test("BFu15i_Vp_BFu32i");
    static STRUCT_IF_C BFu15i_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu15i_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu15i_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu32i, BFu15i_Vp_BFu32i)
//============================================================================


struct  BFu15i_Vp_BFu32ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu15i_Vp_BFu32ll) C1{ Fi:15 Fp FL:32}



static void Test_BFu15i_Vp_BFu32ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu32ll");
    static STRUCT_IF_C BFu15i_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu15i_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu15i_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu32ll, BFu15i_Vp_BFu32ll)
//============================================================================


struct  BFu15i_Vp_BFu33  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu15i_Vp_BFu33) C1{ Fi:15 Fp FL:33}



static void Test_BFu15i_Vp_BFu33()
{
  {
    init_simple_test("BFu15i_Vp_BFu33");
    static STRUCT_IF_C BFu15i_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu15i_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu15i_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu33, BFu15i_Vp_BFu33)
//============================================================================


struct  BFu15i_Vp_BFu7c  {
  unsigned int v1:15;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu15i_Vp_BFu7c) C1{ Fi:15 Fp Fc:7}



static void Test_BFu15i_Vp_BFu7c()
{
  {
    init_simple_test("BFu15i_Vp_BFu7c");
    static STRUCT_IF_C BFu15i_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu15i_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu15i_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu7c, BFu15i_Vp_BFu7c)
//============================================================================


struct  BFu15i_Vp_BFu7i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu15i_Vp_BFu7i) C1{ Fi:15 Fp Fi:7}



static void Test_BFu15i_Vp_BFu7i()
{
  {
    init_simple_test("BFu15i_Vp_BFu7i");
    static STRUCT_IF_C BFu15i_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu15i_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu15i_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu7i, BFu15i_Vp_BFu7i)
//============================================================================


struct  BFu15i_Vp_BFu7ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu15i_Vp_BFu7ll) C1{ Fi:15 Fp FL:7}



static void Test_BFu15i_Vp_BFu7ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu7ll");
    static STRUCT_IF_C BFu15i_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu15i_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu15i_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu7ll, BFu15i_Vp_BFu7ll)
//============================================================================


struct  BFu15i_Vp_BFu7s  {
  unsigned int v1:15;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu15i_Vp_BFu7s) C1{ Fi:15 Fp Fs:7}



static void Test_BFu15i_Vp_BFu7s()
{
  {
    init_simple_test("BFu15i_Vp_BFu7s");
    static STRUCT_IF_C BFu15i_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu15i_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu15i_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu7s, BFu15i_Vp_BFu7s)
//============================================================================


struct  BFu15i_Vp_BFu8c  {
  unsigned int v1:15;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu15i_Vp_BFu8c) C1{ Fi:15 Fp Fc:8}



static void Test_BFu15i_Vp_BFu8c()
{
  {
    init_simple_test("BFu15i_Vp_BFu8c");
    static STRUCT_IF_C BFu15i_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu15i_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu15i_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu8c, BFu15i_Vp_BFu8c)
//============================================================================


struct  BFu15i_Vp_BFu8i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu15i_Vp_BFu8i) C1{ Fi:15 Fp Fi:8}



static void Test_BFu15i_Vp_BFu8i()
{
  {
    init_simple_test("BFu15i_Vp_BFu8i");
    static STRUCT_IF_C BFu15i_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu15i_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu15i_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu8i, BFu15i_Vp_BFu8i)
//============================================================================


struct  BFu15i_Vp_BFu8ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu15i_Vp_BFu8ll) C1{ Fi:15 Fp FL:8}



static void Test_BFu15i_Vp_BFu8ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu8ll");
    static STRUCT_IF_C BFu15i_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu15i_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu15i_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu8ll, BFu15i_Vp_BFu8ll)
//============================================================================


struct  BFu15i_Vp_BFu8s  {
  unsigned int v1:15;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu15i_Vp_BFu8s) C1{ Fi:15 Fp Fs:8}



static void Test_BFu15i_Vp_BFu8s()
{
  {
    init_simple_test("BFu15i_Vp_BFu8s");
    static STRUCT_IF_C BFu15i_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu15i_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu15i_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu8s, BFu15i_Vp_BFu8s)
//============================================================================


struct  BFu15i_Vp_BFu9i  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu15i_Vp_BFu9i) C1{ Fi:15 Fp Fi:9}



static void Test_BFu15i_Vp_BFu9i()
{
  {
    init_simple_test("BFu15i_Vp_BFu9i");
    static STRUCT_IF_C BFu15i_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu15i_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu15i_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu9i, BFu15i_Vp_BFu9i)
//============================================================================


struct  BFu15i_Vp_BFu9ll  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu15i_Vp_BFu9ll) C1{ Fi:15 Fp FL:9}



static void Test_BFu15i_Vp_BFu9ll()
{
  {
    init_simple_test("BFu15i_Vp_BFu9ll");
    static STRUCT_IF_C BFu15i_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu15i_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu15i_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu9ll, BFu15i_Vp_BFu9ll)
//============================================================================


struct  BFu15i_Vp_BFu9s  {
  unsigned int v1:15;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu15i_Vp_BFu9s) C1{ Fi:15 Fp Fs:9}



static void Test_BFu15i_Vp_BFu9s()
{
  {
    init_simple_test("BFu15i_Vp_BFu9s");
    static STRUCT_IF_C BFu15i_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu15i_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu15i_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_BFu9s, BFu15i_Vp_BFu9s)
//============================================================================


struct  BFu15i_Vp_C  {
  unsigned int v1:15;
  void *v2;
  char v3;
};
//SIG(1 BFu15i_Vp_C) C1{ Fi:15 Fp Fc}



static void Test_BFu15i_Vp_C()
{
  {
    init_simple_test("BFu15i_Vp_C");
    static STRUCT_IF_C BFu15i_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_C, BFu15i_Vp_C)
//============================================================================


struct  BFu15i_Vp_D  {
  unsigned int v1:15;
  void *v2;
  double v3;
};
//SIG(1 BFu15i_Vp_D) C1{ Fi:15 Fp FL}



static void Test_BFu15i_Vp_D()
{
  {
    init_simple_test("BFu15i_Vp_D");
    static STRUCT_IF_C BFu15i_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_D, BFu15i_Vp_D)
//============================================================================


struct  BFu15i_Vp_F  {
  unsigned int v1:15;
  void *v2;
  float v3;
};
//SIG(1 BFu15i_Vp_F) C1{ Fi:15 Fp Fi}



static void Test_BFu15i_Vp_F()
{
  {
    init_simple_test("BFu15i_Vp_F");
    static STRUCT_IF_C BFu15i_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_F, BFu15i_Vp_F)
//============================================================================


struct  BFu15i_Vp_I  {
  unsigned int v1:15;
  void *v2;
  int v3;
};
//SIG(1 BFu15i_Vp_I) C1{ Fi:15 Fp Fi}



static void Test_BFu15i_Vp_I()
{
  {
    init_simple_test("BFu15i_Vp_I");
    static STRUCT_IF_C BFu15i_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_I, BFu15i_Vp_I)
//============================================================================


struct  BFu15i_Vp_Ip  {
  unsigned int v1:15;
  void *v2;
  int *v3;
};
//SIG(1 BFu15i_Vp_Ip) C1{ Fi:15 Fp[2]}



static void Test_BFu15i_Vp_Ip()
{
  {
    init_simple_test("BFu15i_Vp_Ip");
    static STRUCT_IF_C BFu15i_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_Ip, BFu15i_Vp_Ip)
//============================================================================


struct  BFu15i_Vp_L  {
  unsigned int v1:15;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu15i_Vp_L) C1{ Fi:15 Fp FL}



static void Test_BFu15i_Vp_L()
{
  {
    init_simple_test("BFu15i_Vp_L");
    static STRUCT_IF_C BFu15i_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_L, BFu15i_Vp_L)
//============================================================================


struct  BFu15i_Vp_S  {
  unsigned int v1:15;
  void *v2;
  short v3;
};
//SIG(1 BFu15i_Vp_S) C1{ Fi:15 Fp Fs}



static void Test_BFu15i_Vp_S()
{
  {
    init_simple_test("BFu15i_Vp_S");
    static STRUCT_IF_C BFu15i_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_S, BFu15i_Vp_S)
//============================================================================


struct  BFu15i_Vp_Uc  {
  unsigned int v1:15;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu15i_Vp_Uc) C1{ Fi:15 Fp Fc}



static void Test_BFu15i_Vp_Uc()
{
  {
    init_simple_test("BFu15i_Vp_Uc");
    static STRUCT_IF_C BFu15i_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_Uc, BFu15i_Vp_Uc)
//============================================================================


struct  BFu15i_Vp_Ui  {
  unsigned int v1:15;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu15i_Vp_Ui) C1{ Fi:15 Fp Fi}



static void Test_BFu15i_Vp_Ui()
{
  {
    init_simple_test("BFu15i_Vp_Ui");
    static STRUCT_IF_C BFu15i_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_Ui, BFu15i_Vp_Ui)
//============================================================================


struct  BFu15i_Vp_Ul  {
  unsigned int v1:15;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu15i_Vp_Ul) C1{ Fi:15 Fp FL}



static void Test_BFu15i_Vp_Ul()
{
  {
    init_simple_test("BFu15i_Vp_Ul");
    static STRUCT_IF_C BFu15i_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu15i_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_Ul, BFu15i_Vp_Ul)
//============================================================================


struct  BFu15i_Vp_Us  {
  unsigned int v1:15;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu15i_Vp_Us) C1{ Fi:15 Fp Fs}



static void Test_BFu15i_Vp_Us()
{
  {
    init_simple_test("BFu15i_Vp_Us");
    static STRUCT_IF_C BFu15i_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_Us, BFu15i_Vp_Us)
//============================================================================


struct  BFu15i_Vp_Vp  {
  unsigned int v1:15;
  void *v2;
  void *v3;
};
//SIG(1 BFu15i_Vp_Vp) C1{ Fi:15 Fp[2]}



static void Test_BFu15i_Vp_Vp()
{
  {
    init_simple_test("BFu15i_Vp_Vp");
    static STRUCT_IF_C BFu15i_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu15i_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15i_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15i_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15i_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu15i_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu15i_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15i_Vp_Vp, BFu15i_Vp_Vp)
//============================================================================


struct  BFu15ll  {
  __tsu64 v1:15;
};
//SIG(1 BFu15ll) C1{ FL:15}



static void Test_BFu15ll()
{
  {
    init_simple_test("BFu15ll");
    static STRUCT_IF_C BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll, BFu15ll)
//============================================================================


struct  BFu15ll_BFs15i  {
  __tsu64 v1:15;
  signed int v2:15;
};
//SIG(1 BFu15ll_BFs15i) C1{ FL:15 Fi:15}



static void Test_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i, BFu15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFs15i_BFs15i  {
  __tsu64 v1:15;
  signed int v2:15;
  signed int v3:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15i) C1{ FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15i, BFu15ll_BFs15i_BFs15i)
//============================================================================


struct  BFu15ll_BFs15i_BFs15i_BFs15i  {
  __tsu64 v1:15;
  signed int v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15i_BFs15i) C1{ FL:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15i_BFs15i, BFu15ll_BFs15i_BFs15i_BFs15i)
//============================================================================


struct  BFu15ll_BFs15i_BFs15i_BFs15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15i_BFs15ll) C1{ FL:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15i_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15i_BFs15ll, BFu15ll_BFs15i_BFs15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFs15i_BFs15s  {
  __tsu64 v1:15;
  signed int v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15i_BFs15s) C1{ FL:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15i_BFs15s, BFu15ll_BFs15i_BFs15i_BFs15s)
//============================================================================


struct  BFu15ll_BFs15i_BFs15i_BFu15i  {
  __tsu64 v1:15;
  signed int v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15i_BFu15i) C1{ FL:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15i_BFu15i, BFu15ll_BFs15i_BFs15i_BFu15i)
//============================================================================


struct  BFu15ll_BFs15i_BFs15i_BFu15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15i_BFu15ll) C1{ FL:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15i_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15i_BFu15ll, BFu15ll_BFs15i_BFs15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFs15i_BFu15s  {
  __tsu64 v1:15;
  signed int v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15i_BFu15s) C1{ FL:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15i_BFu15s, BFu15ll_BFs15i_BFs15i_BFu15s)
//============================================================================


struct  BFu15ll_BFs15i_BFs15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15ll) C1{ FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15ll, BFu15ll_BFs15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFs15ll_BFs15i  {
  __tsu64 v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15ll_BFs15i) C1{ FL:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15ll_BFs15i, BFu15ll_BFs15i_BFs15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFs15i_BFs15ll_BFs15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15ll_BFs15ll) C1{ FL:15 Fi:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15i_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15ll_BFs15ll, BFu15ll_BFs15i_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFs15ll_BFs15s  {
  __tsu64 v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15ll_BFs15s) C1{ FL:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15ll_BFs15s, BFu15ll_BFs15i_BFs15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFs15i_BFs15ll_BFu15i  {
  __tsu64 v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15ll_BFu15i) C1{ FL:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15ll_BFu15i, BFu15ll_BFs15i_BFs15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFs15i_BFs15ll_BFu15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15ll_BFu15ll) C1{ FL:15 Fi:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15i_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15ll_BFu15ll, BFu15ll_BFs15i_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFs15ll_BFu15s  {
  __tsu64 v1:15;
  signed int v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15ll_BFu15s) C1{ FL:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15ll_BFu15s, BFu15ll_BFs15i_BFs15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFs15i_BFs15s  {
  __tsu64 v1:15;
  signed int v2:15;
  signed short v3:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15s) C1{ FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15s, BFu15ll_BFs15i_BFs15s)
//============================================================================


struct  BFu15ll_BFs15i_BFs15s_BFs15i  {
  __tsu64 v1:15;
  signed int v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15s_BFs15i) C1{ FL:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15s_BFs15i, BFu15ll_BFs15i_BFs15s_BFs15i)
//============================================================================


struct  BFu15ll_BFs15i_BFs15s_BFs15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15s_BFs15ll) C1{ FL:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15i_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15s_BFs15ll, BFu15ll_BFs15i_BFs15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFs15s_BFs15s  {
  __tsu64 v1:15;
  signed int v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15s_BFs15s) C1{ FL:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15s_BFs15s, BFu15ll_BFs15i_BFs15s_BFs15s)
//============================================================================


struct  BFu15ll_BFs15i_BFs15s_BFu15i  {
  __tsu64 v1:15;
  signed int v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15s_BFu15i) C1{ FL:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15s_BFu15i, BFu15ll_BFs15i_BFs15s_BFu15i)
//============================================================================


struct  BFu15ll_BFs15i_BFs15s_BFu15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15s_BFu15ll) C1{ FL:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15i_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15s_BFu15ll, BFu15ll_BFs15i_BFs15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFs15s_BFu15s  {
  __tsu64 v1:15;
  signed int v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFs15s_BFu15s) C1{ FL:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFs15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFs15s_BFu15s, BFu15ll_BFs15i_BFs15s_BFu15s)
//============================================================================


struct  BFu15ll_BFs15i_BFu15i  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15i) C1{ FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15i, BFu15ll_BFs15i_BFu15i)
//============================================================================


struct  BFu15ll_BFs15i_BFu15i_BFs15i  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15i_BFs15i) C1{ FL:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15i_BFs15i, BFu15ll_BFs15i_BFu15i_BFs15i)
//============================================================================


struct  BFu15ll_BFs15i_BFu15i_BFs15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15i_BFs15ll) C1{ FL:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15i_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15i_BFs15ll, BFu15ll_BFs15i_BFu15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFu15i_BFs15s  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15i_BFs15s) C1{ FL:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15i_BFs15s, BFu15ll_BFs15i_BFu15i_BFs15s)
//============================================================================


struct  BFu15ll_BFs15i_BFu15i_BFu15i  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15i_BFu15i) C1{ FL:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15i_BFu15i, BFu15ll_BFs15i_BFu15i_BFu15i)
//============================================================================


struct  BFu15ll_BFs15i_BFu15i_BFu15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15i_BFu15ll) C1{ FL:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15i_BFu15ll, BFu15ll_BFs15i_BFu15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFu15i_BFu15s  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15i_BFu15s) C1{ FL:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15i_BFu15s, BFu15ll_BFs15i_BFu15i_BFu15s)
//============================================================================


struct  BFu15ll_BFs15i_BFu15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15ll) C1{ FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15ll, BFu15ll_BFs15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFu15ll_BFs15i  {
  __tsu64 v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15ll_BFs15i) C1{ FL:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15ll_BFs15i, BFu15ll_BFs15i_BFu15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFs15i_BFu15ll_BFs15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15ll_BFs15ll) C1{ FL:15 Fi:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15i_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15ll_BFs15ll, BFu15ll_BFs15i_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFu15ll_BFs15s  {
  __tsu64 v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15ll_BFs15s) C1{ FL:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15ll_BFs15s, BFu15ll_BFs15i_BFu15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFs15i_BFu15ll_BFu15i  {
  __tsu64 v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15ll_BFu15i) C1{ FL:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15ll_BFu15i, BFu15ll_BFs15i_BFu15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFs15i_BFu15ll_BFu15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15ll_BFu15ll) C1{ FL:15 Fi:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15ll_BFu15ll, BFu15ll_BFs15i_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFu15ll_BFu15s  {
  __tsu64 v1:15;
  signed int v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15ll_BFu15s) C1{ FL:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15ll_BFu15s, BFu15ll_BFs15i_BFu15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFs15i_BFu15s  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15s) C1{ FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15s, BFu15ll_BFs15i_BFu15s)
//============================================================================


struct  BFu15ll_BFs15i_BFu15s_BFs15i  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15s_BFs15i) C1{ FL:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15s_BFs15i, BFu15ll_BFs15i_BFu15s_BFs15i)
//============================================================================


struct  BFu15ll_BFs15i_BFu15s_BFs15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15s_BFs15ll) C1{ FL:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15i_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15s_BFs15ll, BFu15ll_BFs15i_BFu15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFu15s_BFs15s  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15s_BFs15s) C1{ FL:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15s_BFs15s, BFu15ll_BFs15i_BFu15s_BFs15s)
//============================================================================


struct  BFu15ll_BFs15i_BFu15s_BFu15i  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15s_BFu15i) C1{ FL:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15s_BFu15i, BFu15ll_BFs15i_BFu15s_BFu15i)
//============================================================================


struct  BFu15ll_BFs15i_BFu15s_BFu15ll  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15s_BFu15ll) C1{ FL:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15s_BFu15ll, BFu15ll_BFs15i_BFu15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15i_BFu15s_BFu15s  {
  __tsu64 v1:15;
  signed int v2:15;
  unsigned short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15i_BFu15s_BFu15s) C1{ FL:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15i_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15i_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15i_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15i_BFu15s_BFu15s, BFu15ll_BFs15i_BFu15s_BFu15s)
//============================================================================


struct  BFu15ll_BFs15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
};
//SIG(1 BFu15ll_BFs15ll) C1{ FL:15 FL:15}



static void Test_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll, BFu15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15i) C1{ FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15i, BFu15ll_BFs15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15i_BFs15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15i_BFs15i) C1{ FL:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15i_BFs15i, BFu15ll_BFs15ll_BFs15i_BFs15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15i_BFs15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15i_BFs15ll) C1{ FL:15 FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15i_BFs15ll, BFu15ll_BFs15ll_BFs15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15i_BFs15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15i_BFs15s) C1{ FL:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15i_BFs15s, BFu15ll_BFs15ll_BFs15i_BFs15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15i_BFu15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15i_BFu15i) C1{ FL:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15i_BFu15i, BFu15ll_BFs15ll_BFs15i_BFu15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15i_BFu15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15i_BFu15ll) C1{ FL:15 FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15i_BFu15ll, BFu15ll_BFs15ll_BFs15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15i_BFu15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15i_BFu15s) C1{ FL:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15i_BFu15s, BFu15ll_BFs15ll_BFs15i_BFu15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15ll) C1{ FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15ll, BFu15ll_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15ll_BFs15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15ll_BFs15i) C1{ FL:15 FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15ll_BFs15i, BFu15ll_BFs15ll_BFs15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15ll_BFs15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15ll_BFs15ll) C1{ FL:15 FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15ll_BFs15ll, BFu15ll_BFs15ll_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15ll_BFs15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15ll_BFs15s) C1{ FL:15 FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15ll_BFs15s, BFu15ll_BFs15ll_BFs15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15ll_BFu15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15ll_BFu15i) C1{ FL:15 FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15ll_BFu15i, BFu15ll_BFs15ll_BFs15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15ll_BFu15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15ll_BFu15ll) C1{ FL:15 FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15ll_BFu15ll, BFu15ll_BFs15ll_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15ll_BFu15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15ll_BFu15s) C1{ FL:15 FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15ll_BFu15s, BFu15ll_BFs15ll_BFs15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15s) C1{ FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15s, BFu15ll_BFs15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15s_BFs15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15s_BFs15i) C1{ FL:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15s_BFs15i, BFu15ll_BFs15ll_BFs15s_BFs15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15s_BFs15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15s_BFs15ll) C1{ FL:15 FL:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15s_BFs15ll, BFu15ll_BFs15ll_BFs15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15s_BFs15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15s_BFs15s) C1{ FL:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15s_BFs15s, BFu15ll_BFs15ll_BFs15s_BFs15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15s_BFu15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15s_BFu15i) C1{ FL:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15s_BFu15i, BFu15ll_BFs15ll_BFs15s_BFu15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15s_BFu15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15s_BFu15ll) C1{ FL:15 FL:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15s_BFu15ll, BFu15ll_BFs15ll_BFs15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFs15s_BFu15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFs15s_BFu15s) C1{ FL:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFs15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFs15s_BFu15s, BFu15ll_BFs15ll_BFs15s_BFu15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15i) C1{ FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15i, BFu15ll_BFs15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15i_BFs15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15i_BFs15i) C1{ FL:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15i_BFs15i, BFu15ll_BFs15ll_BFu15i_BFs15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15i_BFs15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15i_BFs15ll) C1{ FL:15 FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15i_BFs15ll, BFu15ll_BFs15ll_BFu15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15i_BFs15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15i_BFs15s) C1{ FL:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15i_BFs15s, BFu15ll_BFs15ll_BFu15i_BFs15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15i_BFu15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15i_BFu15i) C1{ FL:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15i_BFu15i, BFu15ll_BFs15ll_BFu15i_BFu15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15i_BFu15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15i_BFu15ll) C1{ FL:15 FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15i_BFu15ll, BFu15ll_BFs15ll_BFu15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15i_BFu15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15i_BFu15s) C1{ FL:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15i_BFu15s, BFu15ll_BFs15ll_BFu15i_BFu15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15ll) C1{ FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15ll, BFu15ll_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15ll_BFs15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15ll_BFs15i) C1{ FL:15 FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15ll_BFs15i, BFu15ll_BFs15ll_BFu15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15ll_BFs15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15ll_BFs15ll) C1{ FL:15 FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15ll_BFs15ll, BFu15ll_BFs15ll_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15ll_BFs15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15ll_BFs15s) C1{ FL:15 FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15ll_BFs15s, BFu15ll_BFs15ll_BFu15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15ll_BFu15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15ll_BFu15i) C1{ FL:15 FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15ll_BFu15i, BFu15ll_BFs15ll_BFu15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15ll_BFu15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15ll_BFu15ll) C1{ FL:15 FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15ll_BFu15ll, BFu15ll_BFs15ll_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15ll_BFu15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15ll_BFu15s) C1{ FL:15 FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15ll_BFu15s, BFu15ll_BFs15ll_BFu15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15s) C1{ FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15s, BFu15ll_BFs15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15s_BFs15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15s_BFs15i) C1{ FL:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15s_BFs15i, BFu15ll_BFs15ll_BFu15s_BFs15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15s_BFs15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15s_BFs15ll) C1{ FL:15 FL:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15s_BFs15ll, BFu15ll_BFs15ll_BFu15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15s_BFs15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15s_BFs15s) C1{ FL:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15s_BFs15s, BFu15ll_BFs15ll_BFu15s_BFs15s)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15s_BFu15i  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15s_BFu15i) C1{ FL:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15ll_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15s_BFu15i, BFu15ll_BFs15ll_BFu15s_BFu15i)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15s_BFu15ll  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15s_BFu15ll) C1{ FL:15 FL:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15ll_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15s_BFu15ll, BFu15ll_BFs15ll_BFu15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15ll_BFu15s_BFu15s  {
  __tsu64 v1:15;
  signed __tsi64 v2:15;
  unsigned short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15ll_BFu15s_BFu15s) C1{ FL:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15ll_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15ll_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15ll_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15ll_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15ll_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15ll_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15ll_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15ll_BFu15s_BFu15s, BFu15ll_BFs15ll_BFu15s_BFu15s)
//============================================================================


struct  BFu15ll_BFs15s  {
  __tsu64 v1:15;
  signed short v2:15;
};
//SIG(1 BFu15ll_BFs15s) C1{ FL:15 Fs:15}



static void Test_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s, BFu15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFs15s_BFs15i  {
  __tsu64 v1:15;
  signed short v2:15;
  signed int v3:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15i) C1{ FL:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15i, BFu15ll_BFs15s_BFs15i)
//============================================================================


struct  BFu15ll_BFs15s_BFs15i_BFs15i  {
  __tsu64 v1:15;
  signed short v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15i_BFs15i) C1{ FL:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15i_BFs15i, BFu15ll_BFs15s_BFs15i_BFs15i)
//============================================================================


struct  BFu15ll_BFs15s_BFs15i_BFs15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15i_BFs15ll) C1{ FL:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15s_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15i_BFs15ll, BFu15ll_BFs15s_BFs15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFs15i_BFs15s  {
  __tsu64 v1:15;
  signed short v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15i_BFs15s) C1{ FL:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15i_BFs15s, BFu15ll_BFs15s_BFs15i_BFs15s)
//============================================================================


struct  BFu15ll_BFs15s_BFs15i_BFu15i  {
  __tsu64 v1:15;
  signed short v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15i_BFu15i) C1{ FL:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15i_BFu15i, BFu15ll_BFs15s_BFs15i_BFu15i)
//============================================================================


struct  BFu15ll_BFs15s_BFs15i_BFu15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15i_BFu15ll) C1{ FL:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15s_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15i_BFu15ll, BFu15ll_BFs15s_BFs15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFs15i_BFu15s  {
  __tsu64 v1:15;
  signed short v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15i_BFu15s) C1{ FL:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15i_BFu15s, BFu15ll_BFs15s_BFs15i_BFu15s)
//============================================================================


struct  BFu15ll_BFs15s_BFs15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15ll) C1{ FL:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15ll, BFu15ll_BFs15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFs15ll_BFs15i  {
  __tsu64 v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15ll_BFs15i) C1{ FL:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15ll_BFs15i, BFu15ll_BFs15s_BFs15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFs15s_BFs15ll_BFs15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15ll_BFs15ll) C1{ FL:15 Fs:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15s_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15ll_BFs15ll, BFu15ll_BFs15s_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFs15ll_BFs15s  {
  __tsu64 v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15ll_BFs15s) C1{ FL:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15ll_BFs15s, BFu15ll_BFs15s_BFs15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFs15s_BFs15ll_BFu15i  {
  __tsu64 v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15ll_BFu15i) C1{ FL:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15ll_BFu15i, BFu15ll_BFs15s_BFs15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFs15s_BFs15ll_BFu15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15ll_BFu15ll) C1{ FL:15 Fs:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15s_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15ll_BFu15ll, BFu15ll_BFs15s_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFs15ll_BFu15s  {
  __tsu64 v1:15;
  signed short v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15ll_BFu15s) C1{ FL:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15ll_BFu15s, BFu15ll_BFs15s_BFs15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFs15s_BFs15s  {
  __tsu64 v1:15;
  signed short v2:15;
  signed short v3:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15s) C1{ FL:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15s, BFu15ll_BFs15s_BFs15s)
//============================================================================


struct  BFu15ll_BFs15s_BFs15s_BFs15i  {
  __tsu64 v1:15;
  signed short v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15s_BFs15i) C1{ FL:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15s_BFs15i, BFu15ll_BFs15s_BFs15s_BFs15i)
//============================================================================


struct  BFu15ll_BFs15s_BFs15s_BFs15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15s_BFs15ll) C1{ FL:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15s_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15s_BFs15ll, BFu15ll_BFs15s_BFs15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFs15s_BFs15s  {
  __tsu64 v1:15;
  signed short v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15s_BFs15s) C1{ FL:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15s_BFs15s, BFu15ll_BFs15s_BFs15s_BFs15s)
//============================================================================


struct  BFu15ll_BFs15s_BFs15s_BFu15i  {
  __tsu64 v1:15;
  signed short v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15s_BFu15i) C1{ FL:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15s_BFu15i, BFu15ll_BFs15s_BFs15s_BFu15i)
//============================================================================


struct  BFu15ll_BFs15s_BFs15s_BFu15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15s_BFu15ll) C1{ FL:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15s_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15s_BFu15ll, BFu15ll_BFs15s_BFs15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFs15s_BFu15s  {
  __tsu64 v1:15;
  signed short v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFs15s_BFu15s) C1{ FL:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFs15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFs15s_BFu15s, BFu15ll_BFs15s_BFs15s_BFu15s)
//============================================================================


struct  BFu15ll_BFs15s_BFu15i  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15i) C1{ FL:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15i, BFu15ll_BFs15s_BFu15i)
//============================================================================


struct  BFu15ll_BFs15s_BFu15i_BFs15i  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15i_BFs15i) C1{ FL:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15i_BFs15i, BFu15ll_BFs15s_BFu15i_BFs15i)
//============================================================================


struct  BFu15ll_BFs15s_BFu15i_BFs15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15i_BFs15ll) C1{ FL:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15s_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15i_BFs15ll, BFu15ll_BFs15s_BFu15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFu15i_BFs15s  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15i_BFs15s) C1{ FL:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15i_BFs15s, BFu15ll_BFs15s_BFu15i_BFs15s)
//============================================================================


struct  BFu15ll_BFs15s_BFu15i_BFu15i  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15i_BFu15i) C1{ FL:15 Fs:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15i_BFu15i, BFu15ll_BFs15s_BFu15i_BFu15i)
//============================================================================


struct  BFu15ll_BFs15s_BFu15i_BFu15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15i_BFu15ll) C1{ FL:15 Fs:15 Fi:15 FL:15}



static void Test_BFu15ll_BFs15s_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15i_BFu15ll, BFu15ll_BFs15s_BFu15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFu15i_BFu15s  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15i_BFu15s) C1{ FL:15 Fs:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15i_BFu15s, BFu15ll_BFs15s_BFu15i_BFu15s)
//============================================================================


struct  BFu15ll_BFs15s_BFu15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15ll) C1{ FL:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15ll, BFu15ll_BFs15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFu15ll_BFs15i  {
  __tsu64 v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15ll_BFs15i) C1{ FL:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15ll_BFs15i, BFu15ll_BFs15s_BFu15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFs15s_BFu15ll_BFs15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15ll_BFs15ll) C1{ FL:15 Fs:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15s_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15ll_BFs15ll, BFu15ll_BFs15s_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFu15ll_BFs15s  {
  __tsu64 v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15ll_BFs15s) C1{ FL:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15ll_BFs15s, BFu15ll_BFs15s_BFu15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFs15s_BFu15ll_BFu15i  {
  __tsu64 v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15ll_BFu15i) C1{ FL:15 Fs:15 FL:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15ll_BFu15i, BFu15ll_BFs15s_BFu15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFs15s_BFu15ll_BFu15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15ll_BFu15ll) C1{ FL:15 Fs:15 FL:15 FL:15}



static void Test_BFu15ll_BFs15s_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15ll_BFu15ll, BFu15ll_BFs15s_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFu15ll_BFu15s  {
  __tsu64 v1:15;
  signed short v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15ll_BFu15s) C1{ FL:15 Fs:15 FL:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15ll_BFu15s, BFu15ll_BFs15s_BFu15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFs15s_BFu15s  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15s) C1{ FL:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15s, BFu15ll_BFs15s_BFu15s)
//============================================================================


struct  BFu15ll_BFs15s_BFu15s_BFs15i  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15s_BFs15i) C1{ FL:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15s_BFs15i, BFu15ll_BFs15s_BFu15s_BFs15i)
//============================================================================


struct  BFu15ll_BFs15s_BFu15s_BFs15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15s_BFs15ll) C1{ FL:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15s_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15s_BFs15ll, BFu15ll_BFs15s_BFu15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFu15s_BFs15s  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15s_BFs15s) C1{ FL:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15s_BFs15s, BFu15ll_BFs15s_BFu15s_BFs15s)
//============================================================================


struct  BFu15ll_BFs15s_BFu15s_BFu15i  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15s_BFu15i) C1{ FL:15 Fs:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFs15s_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15s_BFu15i, BFu15ll_BFs15s_BFu15s_BFu15i)
//============================================================================


struct  BFu15ll_BFs15s_BFu15s_BFu15ll  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15s_BFu15ll) C1{ FL:15 Fs:15 Fs:15 FL:15}



static void Test_BFu15ll_BFs15s_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15s_BFu15ll, BFu15ll_BFs15s_BFu15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFs15s_BFu15s_BFu15s  {
  __tsu64 v1:15;
  signed short v2:15;
  unsigned short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFs15s_BFu15s_BFu15s) C1{ FL:15 Fs:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFs15s_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFs15s_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFs15s_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFs15s_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFs15s_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFs15s_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFs15s_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFs15s_BFu15s_BFu15s, BFu15ll_BFs15s_BFu15s_BFu15s)
//============================================================================


struct  BFu15ll_BFu15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
};
//SIG(1 BFu15ll_BFu15i) C1{ FL:15 Fi:15}



static void Test_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i, BFu15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFu15i_BFs15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed int v3:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15i) C1{ FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15i, BFu15ll_BFu15i_BFs15i)
//============================================================================


struct  BFu15ll_BFu15i_BFs15i_BFs15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15i_BFs15i) C1{ FL:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15i_BFs15i, BFu15ll_BFu15i_BFs15i_BFs15i)
//============================================================================


struct  BFu15ll_BFu15i_BFs15i_BFs15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15i_BFs15ll) C1{ FL:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15i_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15i_BFs15ll, BFu15ll_BFu15i_BFs15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFs15i_BFs15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15i_BFs15s) C1{ FL:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15i_BFs15s, BFu15ll_BFu15i_BFs15i_BFs15s)
//============================================================================


struct  BFu15ll_BFu15i_BFs15i_BFu15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15i_BFu15i) C1{ FL:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15i_BFu15i, BFu15ll_BFu15i_BFs15i_BFu15i)
//============================================================================


struct  BFu15ll_BFu15i_BFs15i_BFu15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15i_BFu15ll) C1{ FL:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15i_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15i_BFu15ll, BFu15ll_BFu15i_BFs15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFs15i_BFu15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15i_BFu15s) C1{ FL:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15i_BFu15s, BFu15ll_BFu15i_BFs15i_BFu15s)
//============================================================================


struct  BFu15ll_BFu15i_BFs15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15ll) C1{ FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15ll, BFu15ll_BFu15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFs15ll_BFs15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15ll_BFs15i) C1{ FL:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15ll_BFs15i, BFu15ll_BFu15i_BFs15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFu15i_BFs15ll_BFs15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15ll_BFs15ll) C1{ FL:15 Fi:15 FL:15 FL:15}



static void Test_BFu15ll_BFu15i_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15ll_BFs15ll, BFu15ll_BFu15i_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFs15ll_BFs15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15ll_BFs15s) C1{ FL:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15ll_BFs15s, BFu15ll_BFu15i_BFs15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFu15i_BFs15ll_BFu15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15ll_BFu15i) C1{ FL:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15ll_BFu15i, BFu15ll_BFu15i_BFs15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFu15i_BFs15ll_BFu15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15ll_BFu15ll) C1{ FL:15 Fi:15 FL:15 FL:15}



static void Test_BFu15ll_BFu15i_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15ll_BFu15ll, BFu15ll_BFu15i_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFs15ll_BFu15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15ll_BFu15s) C1{ FL:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15ll_BFu15s, BFu15ll_BFu15i_BFs15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFu15i_BFs15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed short v3:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15s) C1{ FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15s, BFu15ll_BFu15i_BFs15s)
//============================================================================


struct  BFu15ll_BFu15i_BFs15s_BFs15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15s_BFs15i) C1{ FL:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15s_BFs15i, BFu15ll_BFu15i_BFs15s_BFs15i)
//============================================================================


struct  BFu15ll_BFu15i_BFs15s_BFs15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15s_BFs15ll) C1{ FL:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15ll_BFu15i_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15s_BFs15ll, BFu15ll_BFu15i_BFs15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFs15s_BFs15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15s_BFs15s) C1{ FL:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15s_BFs15s, BFu15ll_BFu15i_BFs15s_BFs15s)
//============================================================================


struct  BFu15ll_BFu15i_BFs15s_BFu15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15s_BFu15i) C1{ FL:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15s_BFu15i, BFu15ll_BFu15i_BFs15s_BFu15i)
//============================================================================


struct  BFu15ll_BFu15i_BFs15s_BFu15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15s_BFu15ll) C1{ FL:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15ll_BFu15i_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15s_BFu15ll, BFu15ll_BFu15i_BFs15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFs15s_BFu15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFs15s_BFu15s) C1{ FL:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFs15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFs15s_BFu15s, BFu15ll_BFu15i_BFs15s_BFu15s)
//============================================================================


struct  BFu15ll_BFu15i_BFu15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15i) C1{ FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15i, BFu15ll_BFu15i_BFu15i)
//============================================================================


struct  BFu15ll_BFu15i_BFu15i_BFs15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15i_BFs15i) C1{ FL:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15i_BFs15i, BFu15ll_BFu15i_BFu15i_BFs15i)
//============================================================================


struct  BFu15ll_BFu15i_BFu15i_BFs15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15i_BFs15ll) C1{ FL:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15i_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15i_BFs15ll, BFu15ll_BFu15i_BFu15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu15i_BFs15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15i_BFs15s) C1{ FL:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15i_BFs15s, BFu15ll_BFu15i_BFu15i_BFs15s)
//============================================================================


struct  BFu15ll_BFu15i_BFu15i_BFu15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15i_BFu15i) C1{ FL:15 Fi:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15i_BFu15i, BFu15ll_BFu15i_BFu15i_BFu15i)
//============================================================================


struct  BFu15ll_BFu15i_BFu15i_BFu15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15i_BFu15ll) C1{ FL:15 Fi:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15i_BFu15ll, BFu15ll_BFu15i_BFu15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu15i_BFu15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15i_BFu15s) C1{ FL:15 Fi:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFu15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15i_BFu15s, BFu15ll_BFu15i_BFu15i_BFu15s)
//============================================================================


struct  BFu15ll_BFu15i_BFu15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15ll) C1{ FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15ll, BFu15ll_BFu15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu15ll_BFs15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15ll_BFs15i) C1{ FL:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15ll_BFs15i, BFu15ll_BFu15i_BFu15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFu15i_BFu15ll_BFs15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15ll_BFs15ll) C1{ FL:15 Fi:15 FL:15 FL:15}



static void Test_BFu15ll_BFu15i_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15ll_BFs15ll, BFu15ll_BFu15i_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu15ll_BFs15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15ll_BFs15s) C1{ FL:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15ll_BFs15s, BFu15ll_BFu15i_BFu15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFu15i_BFu15ll_BFu15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15ll_BFu15i) C1{ FL:15 Fi:15 FL:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15ll_BFu15i, BFu15ll_BFu15i_BFu15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFu15i_BFu15ll_BFu15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15ll_BFu15ll) C1{ FL:15 Fi:15 FL:15 FL:15}



static void Test_BFu15ll_BFu15i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15ll_BFu15ll, BFu15ll_BFu15i_BFu15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu15ll_BFu15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15ll_BFu15s) C1{ FL:15 Fi:15 FL:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15ll_BFu15s, BFu15ll_BFu15i_BFu15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFu15i_BFu15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15s) C1{ FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15s, BFu15ll_BFu15i_BFu15s)
//============================================================================


struct  BFu15ll_BFu15i_BFu15s_BFs15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15s_BFs15i) C1{ FL:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFu15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15s_BFs15i, BFu15ll_BFu15i_BFu15s_BFs15i)
//============================================================================


struct  BFu15ll_BFu15i_BFu15s_BFs15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15s_BFs15ll) C1{ FL:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15ll_BFu15i_BFu15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15s_BFs15ll, BFu15ll_BFu15i_BFu15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu15s_BFs15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15s_BFs15s) C1{ FL:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFu15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15s_BFs15s, BFu15ll_BFu15i_BFu15s_BFs15s)
//============================================================================


struct  BFu15ll_BFu15i_BFu15s_BFu15i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15s_BFu15i) C1{ FL:15 Fi:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFu15i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15s_BFu15i, BFu15ll_BFu15i_BFu15s_BFu15i)
//============================================================================


struct  BFu15ll_BFu15i_BFu15s_BFu15ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15s_BFu15ll) C1{ FL:15 Fi:15 Fs:15 FL:15}



static void Test_BFu15ll_BFu15i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15s_BFu15ll, BFu15ll_BFu15i_BFu15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu15s_BFu15s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15i_BFu15s_BFu15s) C1{ FL:15 Fi:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFu15i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15i_BFu15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu15s_BFu15s, BFu15ll_BFu15i_BFu15s_BFu15s)
//============================================================================


struct  BFu15ll_BFu15i_BFu16i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu15ll_BFu15i_BFu16i) C1{ FL:15 Fi:15 Fi:16}



static void Test_BFu15ll_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu16i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15ll_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15ll_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu16i, BFu15ll_BFu15i_BFu16i)
//============================================================================


struct  BFu15ll_BFu15i_BFu16ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu15ll_BFu15i_BFu16ll) C1{ FL:15 Fi:15 FL:16}



static void Test_BFu15ll_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 6, 16, 1, "BFu15ll_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 6, 16, hide_ull(1LL<<15), "BFu15ll_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu16ll, BFu15ll_BFu15i_BFu16ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu16s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu15ll_BFu15i_BFu16s) C1{ FL:15 Fi:15 Fs:16}



static void Test_BFu15ll_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu16s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu15ll_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu15ll_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu16s, BFu15ll_BFu15i_BFu16s)
//============================================================================


struct  BFu15ll_BFu15i_BFu17i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu15ll_BFu15i_BFu17i) C1{ FL:15 Fi:15 Fi:17}



static void Test_BFu15ll_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu17i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu15ll_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu15ll_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu17i, BFu15ll_BFu15i_BFu17i)
//============================================================================


struct  BFu15ll_BFu15i_BFu17ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu15ll_BFu15i_BFu17ll) C1{ FL:15 Fi:15 FL:17}



static void Test_BFu15ll_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 6, 17, 1, "BFu15ll_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 6, 17, hide_ull(1LL<<16), "BFu15ll_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu17ll, BFu15ll_BFu15i_BFu17ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu1c  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu15ll_BFu15i_BFu1c) C1{ FL:15 Fi:15 Fc:1}



static void Test_BFu15ll_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu1c");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu15i_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15ll_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu1c, BFu15ll_BFu15i_BFu1c)
//============================================================================


struct  BFu15ll_BFu15i_BFu1i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu15ll_BFu15i_BFu1i) C1{ FL:15 Fi:15 Fi:1}



static void Test_BFu15ll_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu1i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu15i_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15ll_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu1i, BFu15ll_BFu15i_BFu1i)
//============================================================================


struct  BFu15ll_BFu15i_BFu1ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu15ll_BFu15i_BFu1ll) C1{ FL:15 Fi:15 FL:1}



static void Test_BFu15ll_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15ll_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu1ll, BFu15ll_BFu15i_BFu1ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu1s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu15ll_BFu15i_BFu1s) C1{ FL:15 Fi:15 Fs:1}



static void Test_BFu15ll_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu1s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu15i_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 3, 6, 1, 1, "BFu15ll_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu1s, BFu15ll_BFu15i_BFu1s)
//============================================================================


struct  BFu15ll_BFu15i_BFu31i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu15ll_BFu15i_BFu31i) C1{ FL:15 Fi:15 Fi:31}



static void Test_BFu15ll_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu31i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu15ll_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu15ll_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu31i, BFu15ll_BFu15i_BFu31i)
//============================================================================


struct  BFu15ll_BFu15i_BFu31ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu15ll_BFu15i_BFu31ll) C1{ FL:15 Fi:15 FL:31}



static void Test_BFu15ll_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 6, 31, 1, "BFu15ll_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 6, 31, hide_ull(1LL<<30), "BFu15ll_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu31ll, BFu15ll_BFu15i_BFu31ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu32i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu15ll_BFu15i_BFu32i) C1{ FL:15 Fi:15 Fi:32}



static void Test_BFu15ll_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu32i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu15ll_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu15ll_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu32i, BFu15ll_BFu15i_BFu32i)
//============================================================================


struct  BFu15ll_BFu15i_BFu32ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu15ll_BFu15i_BFu32ll) C1{ FL:15 Fi:15 FL:32}



static void Test_BFu15ll_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 6, 32, 1, "BFu15ll_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 6, 32, hide_ull(1LL<<31), "BFu15ll_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu32ll, BFu15ll_BFu15i_BFu32ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu33  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu15ll_BFu15i_BFu33) C1{ FL:15 Fi:15 FL:33}



static void Test_BFu15ll_BFu15i_BFu33()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu33");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 3, 6, 33, 1, "BFu15ll_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 3, 6, 33, hide_ull(1LL<<32), "BFu15ll_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu33, BFu15ll_BFu15i_BFu33)
//============================================================================


struct  BFu15ll_BFu15i_BFu7c  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu15ll_BFu15i_BFu7c) C1{ FL:15 Fi:15 Fc:7}



static void Test_BFu15ll_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu7c");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15ll_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15ll_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu7c, BFu15ll_BFu15i_BFu7c)
//============================================================================


struct  BFu15ll_BFu15i_BFu7i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu15ll_BFu15i_BFu7i) C1{ FL:15 Fi:15 Fi:7}



static void Test_BFu15ll_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu7i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15ll_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15ll_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu7i, BFu15ll_BFu15i_BFu7i)
//============================================================================


struct  BFu15ll_BFu15i_BFu7ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu15ll_BFu15i_BFu7ll) C1{ FL:15 Fi:15 FL:7}



static void Test_BFu15ll_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 6, 7, 1, "BFu15ll_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 6, 7, hide_ull(1LL<<6), "BFu15ll_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu7ll, BFu15ll_BFu15i_BFu7ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu7s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu15ll_BFu15i_BFu7s) C1{ FL:15 Fi:15 Fs:7}



static void Test_BFu15ll_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu7s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu15ll_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu15ll_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu7s, BFu15ll_BFu15i_BFu7s)
//============================================================================


struct  BFu15ll_BFu15i_BFu8c  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu15ll_BFu15i_BFu8c) C1{ FL:15 Fi:15 Fc:8}



static void Test_BFu15ll_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu8c");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15ll_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15ll_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu8c, BFu15ll_BFu15i_BFu8c)
//============================================================================


struct  BFu15ll_BFu15i_BFu8i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu15ll_BFu15i_BFu8i) C1{ FL:15 Fi:15 Fi:8}



static void Test_BFu15ll_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu8i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15ll_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15ll_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu8i, BFu15ll_BFu15i_BFu8i)
//============================================================================


struct  BFu15ll_BFu15i_BFu8ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu15ll_BFu15i_BFu8ll) C1{ FL:15 Fi:15 FL:8}



static void Test_BFu15ll_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 6, 8, 1, "BFu15ll_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 6, 8, hide_ull(1LL<<7), "BFu15ll_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu8ll, BFu15ll_BFu15i_BFu8ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu8s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu15ll_BFu15i_BFu8s) C1{ FL:15 Fi:15 Fs:8}



static void Test_BFu15ll_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu8s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu15ll_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu15ll_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu8s, BFu15ll_BFu15i_BFu8s)
//============================================================================


struct  BFu15ll_BFu15i_BFu9i  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu15ll_BFu15i_BFu9i) C1{ FL:15 Fi:15 Fi:9}



static void Test_BFu15ll_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu9i");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15ll_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15ll_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu9i, BFu15ll_BFu15i_BFu9i)
//============================================================================


struct  BFu15ll_BFu15i_BFu9ll  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu15ll_BFu15i_BFu9ll) C1{ FL:15 Fi:15 FL:9}



static void Test_BFu15ll_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 6, 9, 1, "BFu15ll_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 6, 9, hide_ull(1LL<<8), "BFu15ll_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu9ll, BFu15ll_BFu15i_BFu9ll)
//============================================================================


struct  BFu15ll_BFu15i_BFu9s  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu15ll_BFu15i_BFu9s) C1{ FL:15 Fi:15 Fs:9}



static void Test_BFu15ll_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu15ll_BFu15i_BFu9s");
    static STRUCT_IF_C BFu15ll_BFu15i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu15ll_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu15ll_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_BFu9s, BFu15ll_BFu15i_BFu9s)
//============================================================================


struct  BFu15ll_BFu15i_C  {
  __tsu64 v1:15;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu15ll_BFu15i_C) C1{ FL:15 Fi:15 Fc}



static void Test_BFu15ll_BFu15i_C()
{
  {
    init_simple_test("BFu15ll_BFu15i_C");
    static STRUCT_IF_C BFu15ll_BFu15i_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_C");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_C");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_C");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_C, BFu15ll_BFu15i_C)
//============================================================================


struct  BFu15ll_BFu15i_D  {
  __tsu64 v1:15;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu15ll_BFu15i_D) C1{ FL:15 Fi:15 FL}



static void Test_BFu15ll_BFu15i_D()
{
  {
    init_simple_test("BFu15ll_BFu15i_D");
    static STRUCT_IF_C BFu15ll_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_D");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_D");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_D, BFu15ll_BFu15i_D)
//============================================================================


struct  BFu15ll_BFu15i_F  {
  __tsu64 v1:15;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu15ll_BFu15i_F) C1{ FL:15 Fi:15 Fi}



static void Test_BFu15ll_BFu15i_F()
{
  {
    init_simple_test("BFu15ll_BFu15i_F");
    static STRUCT_IF_C BFu15ll_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_F");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_F");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_F, BFu15ll_BFu15i_F)
//============================================================================


struct  BFu15ll_BFu15i_I  {
  __tsu64 v1:15;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu15ll_BFu15i_I) C1{ FL:15 Fi:15 Fi}



static void Test_BFu15ll_BFu15i_I()
{
  {
    init_simple_test("BFu15ll_BFu15i_I");
    static STRUCT_IF_C BFu15ll_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_I");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_I");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_I, BFu15ll_BFu15i_I)
//============================================================================


struct  BFu15ll_BFu15i_Ip  {
  __tsu64 v1:15;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu15ll_BFu15i_Ip) C1{ FL:15 Fi:15 Fp}



static void Test_BFu15ll_BFu15i_Ip()
{
  {
    init_simple_test("BFu15ll_BFu15i_Ip");
    static STRUCT_IF_C BFu15ll_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15ll_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_Ip");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_Ip, BFu15ll_BFu15i_Ip)
//============================================================================


struct  BFu15ll_BFu15i_L  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu15ll_BFu15i_L) C1{ FL:15 Fi:15 FL}



static void Test_BFu15ll_BFu15i_L()
{
  {
    init_simple_test("BFu15ll_BFu15i_L");
    static STRUCT_IF_C BFu15ll_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_L");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_L");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_L, BFu15ll_BFu15i_L)
//============================================================================


struct  BFu15ll_BFu15i_S  {
  __tsu64 v1:15;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu15ll_BFu15i_S) C1{ FL:15 Fi:15 Fs}



static void Test_BFu15ll_BFu15i_S()
{
  {
    init_simple_test("BFu15ll_BFu15i_S");
    static STRUCT_IF_C BFu15ll_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_S");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_S");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_S, BFu15ll_BFu15i_S)
//============================================================================


struct  BFu15ll_BFu15i_Uc  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu15ll_BFu15i_Uc) C1{ FL:15 Fi:15 Fc}



static void Test_BFu15ll_BFu15i_Uc()
{
  {
    init_simple_test("BFu15ll_BFu15i_Uc");
    static STRUCT_IF_C BFu15ll_BFu15i_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_Uc");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Uc");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_Uc, BFu15ll_BFu15i_Uc)
//============================================================================


struct  BFu15ll_BFu15i_Ui  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu15ll_BFu15i_Ui) C1{ FL:15 Fi:15 Fi}



static void Test_BFu15ll_BFu15i_Ui()
{
  {
    init_simple_test("BFu15ll_BFu15i_Ui");
    static STRUCT_IF_C BFu15ll_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_Ui");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_Ui, BFu15ll_BFu15i_Ui)
//============================================================================


struct  BFu15ll_BFu15i_Ul  {
  __tsu64 v1:15;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu15ll_BFu15i_Ul) C1{ FL:15 Fi:15 FL}



static void Test_BFu15ll_BFu15i_Ul()
{
  {
    init_simple_test("BFu15ll_BFu15i_Ul");
    static STRUCT_IF_C BFu15ll_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu15ll_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_Ul");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_Ul, BFu15ll_BFu15i_Ul)
//============================================================================


struct  BFu15ll_BFu15i_Us  {
  __tsu64 v1:15;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu15ll_BFu15i_Us) C1{ FL:15 Fi:15 Fs}



static void Test_BFu15ll_BFu15i_Us()
{
  {
    init_simple_test("BFu15ll_BFu15i_Us");
    static STRUCT_IF_C BFu15ll_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15i_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Us");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_Us");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu15ll_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_Us, BFu15ll_BFu15i_Us)
//============================================================================


struct  BFu15ll_BFu15i_Vp  {
  __tsu64 v1:15;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu15ll_BFu15i_Vp) C1{ FL:15 Fi:15 Fp}



static void Test_BFu15ll_BFu15i_Vp()
{
  {
    init_simple_test("BFu15ll_BFu15i_Vp");
    static STRUCT_IF_C BFu15ll_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu15ll_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15i_Vp");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu15ll_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15i_Vp, BFu15ll_BFu15i_Vp)
//============================================================================


struct  BFu15ll_BFu15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
};
//SIG(1 BFu15ll_BFu15ll) C1{ FL:15 FL:15}



static void Test_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll, BFu15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed int v3:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15i) C1{ FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15i, BFu15ll_BFu15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15i_BFs15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15i_BFs15i) C1{ FL:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFs15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15i_BFs15i, BFu15ll_BFu15ll_BFs15i_BFs15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15i_BFs15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15i_BFs15ll) C1{ FL:15 FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15ll_BFs15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15i_BFs15ll, BFu15ll_BFu15ll_BFs15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15i_BFs15s  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15i_BFs15s) C1{ FL:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15ll_BFs15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15i_BFs15s, BFu15ll_BFu15ll_BFs15i_BFs15s)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15i_BFu15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15i_BFu15i) C1{ FL:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFs15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15i_BFu15i, BFu15ll_BFu15ll_BFs15i_BFu15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15i_BFu15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15i_BFu15ll) C1{ FL:15 FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15ll_BFs15i_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15i_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15i_BFu15ll, BFu15ll_BFu15ll_BFs15i_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15i_BFu15s  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed int v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15i_BFu15s) C1{ FL:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15ll_BFs15i_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15i_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15i_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15ll_BFs15i_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15i_BFu15s, BFu15ll_BFu15ll_BFs15i_BFu15s)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15ll) C1{ FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFu15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15ll, BFu15ll_BFu15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15ll_BFs15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15ll_BFs15i) C1{ FL:15 FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFs15ll_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15ll_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15ll_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15ll_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15ll_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15ll_BFs15i, BFu15ll_BFu15ll_BFs15ll_BFs15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15ll_BFs15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15ll_BFs15ll) C1{ FL:15 FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFu15ll_BFs15ll_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15ll_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15ll_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15ll_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15ll_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15ll_BFs15ll, BFu15ll_BFu15ll_BFs15ll_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15ll_BFs15s  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15ll_BFs15s) C1{ FL:15 FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFu15ll_BFs15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15ll_BFs15s, BFu15ll_BFu15ll_BFs15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15ll_BFu15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15ll_BFu15i) C1{ FL:15 FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFs15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15i");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15ll_BFu15i, BFu15ll_BFu15ll_BFs15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15ll_BFu15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15ll_BFu15ll) C1{ FL:15 FL:15 FL:15 FL:15}



static void Test_BFu15ll_BFu15ll_BFs15ll_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15ll_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15ll");
    set_bf_and_test(lv, v4, 5, 5, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15ll_BFu15ll, BFu15ll_BFu15ll_BFs15ll_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15ll_BFu15s  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed __tsi64 v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15ll_BFu15s) C1{ FL:15 FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFu15ll_BFs15ll_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15ll_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v3, 3, 6, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15ll_BFs15ll_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15ll_BFu15s, BFu15ll_BFu15ll_BFs15ll_BFu15s)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15s  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed short v3:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15s) C1{ FL:15 FL:15 Fs:15}



static void Test_BFu15ll_BFu15ll_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15s, BFu15ll_BFu15ll_BFs15s)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15s_BFs15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15s_BFs15i) C1{ FL:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFs15s_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15s_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15s_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15s_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15s_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15s_BFs15i, BFu15ll_BFu15ll_BFs15s_BFs15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15s_BFs15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15s_BFs15ll) C1{ FL:15 FL:15 Fs:15 FL:15}



static void Test_BFu15ll_BFu15ll_BFs15s_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15s_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15s_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15s_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15s_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15s_BFs15ll, BFu15ll_BFu15ll_BFs15s_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15s_BFs15s  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15s_BFs15s) C1{ FL:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFu15ll_BFs15s_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15s_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15s_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15s_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15s_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15s_BFs15s, BFu15ll_BFu15ll_BFs15s_BFs15s)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15s_BFu15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15s_BFu15i) C1{ FL:15 FL:15 Fs:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFs15s_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15s_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15s_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15s_BFu15i, BFu15ll_BFu15ll_BFs15s_BFu15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15s_BFu15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  __tsu64 v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15s_BFu15ll) C1{ FL:15 FL:15 Fs:15 FL:15}



static void Test_BFu15ll_BFu15ll_BFs15s_BFu15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15s_BFu15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15s_BFu15ll, BFu15ll_BFu15ll_BFs15s_BFu15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFs15s_BFu15s  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  signed short v3:15;
  unsigned short v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFs15s_BFu15s) C1{ FL:15 FL:15 Fs:15 Fs:15}



static void Test_BFu15ll_BFu15ll_BFs15s_BFu15s()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFs15s_BFu15s");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFs15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFs15s_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFs15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15ll_BFs15s_BFu15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFs15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFs15s_BFu15s, BFu15ll_BFu15ll_BFs15s_BFu15s)
//============================================================================


struct  BFu15ll_BFu15ll_BFu15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu15ll_BFu15ll_BFu15i) C1{ FL:15 FL:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFu15i, BFu15ll_BFu15ll_BFu15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFu15i_BFs15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
  signed int v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFu15i_BFs15i) C1{ FL:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFu15i_BFs15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFu15i_BFs15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFu15i_BFs15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFu15i_BFs15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFu15i_BFs15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFu15i_BFs15i, BFu15ll_BFu15ll_BFu15i_BFs15i)
//============================================================================


struct  BFu15ll_BFu15ll_BFu15i_BFs15ll  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
  signed __tsi64 v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFu15i_BFs15ll) C1{ FL:15 FL:15 Fi:15 FL:15}



static void Test_BFu15ll_BFu15ll_BFu15i_BFs15ll()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFu15i_BFs15ll");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFu15i_BFs15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFu15i_BFs15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFu15i_BFs15ll)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15ll");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFu15i_BFs15ll, BFu15ll_BFu15ll_BFu15i_BFs15ll)
//============================================================================


struct  BFu15ll_BFu15ll_BFu15i_BFs15s  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
  signed short v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFu15i_BFs15s) C1{ FL:15 FL:15 Fi:15 Fs:15}



static void Test_BFu15ll_BFu15ll_BFu15i_BFs15s()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFu15i_BFs15s");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFu15i_BFs15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFu15i_BFs15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFu15i_BFs15s)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFs15s");
    set_bf_and_test(lv, v4, 6, 0, 15, hide_sll(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFs15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFu15i_BFs15s, BFu15ll_BFu15ll_BFu15i_BFs15s)
//============================================================================


struct  BFu15ll_BFu15ll_BFu15i_BFu15i  {
  __tsu64 v1:15;
  __tsu64 v2:15;
  unsigned int v3:15;
  unsigned int v4:15;
};
//SIG(1 BFu15ll_BFu15ll_BFu15i_BFu15i) C1{ FL:15 FL:15 Fi:15 Fi:15}



static void Test_BFu15ll_BFu15ll_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu15ll_BFu15ll_BFu15i_BFu15i");
    static STRUCT_IF_C BFu15ll_BFu15ll_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu15ll_BFu15ll_BFu15i_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu15ll_BFu15ll_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 1, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, 1, "BFu15ll_BFu15ll_BFu15i_BFu15i");
    set_bf_and_test(lv, v4, 5, 7, 15, hide_ull(1LL<<14), "BFu15ll_BFu15ll_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu15ll_BFu15ll_BFu15i_BFu15i, BFu15ll_BFu15ll_BFu15i_BFu15i)
//============================================================================

