// 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  BFu64_BFs64_BFs64  {
  __tsu64 v1:64;
  signed __tsi64 v2:64;
  signed __tsi64 v3:64;
};
//SIG(1 BFu64_BFs64_BFs64) C1{ FL:64 FL:64 FL:64}



static void Test_BFu64_BFs64_BFs64()
{
  {
    init_simple_test("BFu64_BFs64_BFs64");
    static STRUCT_IF_C BFu64_BFs64_BFs64 lv;
    check2(sizeof(lv), 24, "sizeof(BFu64_BFs64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFs64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFs64_BFs64, BFu64_BFs64_BFs64)
//============================================================================


struct  BFu64_BFs64_BFs64_BFs64  {
  __tsu64 v1:64;
  signed __tsi64 v2:64;
  signed __tsi64 v3:64;
  signed __tsi64 v4:64;
};
//SIG(1 BFu64_BFs64_BFs64_BFs64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFu64_BFs64_BFs64_BFs64()
{
  {
    init_simple_test("BFu64_BFs64_BFs64_BFs64");
    static STRUCT_IF_C BFu64_BFs64_BFs64_BFs64 lv;
    check2(sizeof(lv), 32, "sizeof(BFu64_BFs64_BFs64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFs64_BFs64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFu64_BFs64_BFs64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFs64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFs64_BFs64_BFs64, BFu64_BFs64_BFs64_BFs64)
//============================================================================


struct  BFu64_BFs64_BFs64_BFu64  {
  __tsu64 v1:64;
  signed __tsi64 v2:64;
  signed __tsi64 v3:64;
  __tsu64 v4:64;
};
//SIG(1 BFu64_BFs64_BFs64_BFu64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFu64_BFs64_BFs64_BFu64()
{
  {
    init_simple_test("BFu64_BFs64_BFs64_BFu64");
    static STRUCT_IF_C BFu64_BFs64_BFs64_BFu64 lv;
    check2(sizeof(lv), 32, "sizeof(BFu64_BFs64_BFs64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFs64_BFs64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFu64_BFs64_BFs64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFs64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFs64_BFs64_BFu64, BFu64_BFs64_BFs64_BFu64)
//============================================================================


struct  BFu64_BFs64_BFu64  {
  __tsu64 v1:64;
  signed __tsi64 v2:64;
  __tsu64 v3:64;
};
//SIG(1 BFu64_BFs64_BFu64) C1{ FL:64 FL:64 FL:64}



static void Test_BFu64_BFs64_BFu64()
{
  {
    init_simple_test("BFu64_BFs64_BFu64");
    static STRUCT_IF_C BFu64_BFs64_BFu64 lv;
    check2(sizeof(lv), 24, "sizeof(BFu64_BFs64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFs64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFs64_BFu64, BFu64_BFs64_BFu64)
//============================================================================


struct  BFu64_BFs64_BFu64_BFs64  {
  __tsu64 v1:64;
  signed __tsi64 v2:64;
  __tsu64 v3:64;
  signed __tsi64 v4:64;
};
//SIG(1 BFu64_BFs64_BFu64_BFs64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFu64_BFs64_BFu64_BFs64()
{
  {
    init_simple_test("BFu64_BFs64_BFu64_BFs64");
    static STRUCT_IF_C BFu64_BFs64_BFu64_BFs64 lv;
    check2(sizeof(lv), 32, "sizeof(BFu64_BFs64_BFu64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFs64_BFu64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFu64_BFs64_BFu64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFu64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFs64_BFu64_BFs64, BFu64_BFs64_BFu64_BFs64)
//============================================================================


struct  BFu64_BFs64_BFu64_BFu64  {
  __tsu64 v1:64;
  signed __tsi64 v2:64;
  __tsu64 v3:64;
  __tsu64 v4:64;
};
//SIG(1 BFu64_BFs64_BFu64_BFu64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFu64_BFs64_BFu64_BFu64()
{
  {
    init_simple_test("BFu64_BFs64_BFu64_BFu64");
    static STRUCT_IF_C BFu64_BFs64_BFu64_BFu64 lv;
    check2(sizeof(lv), 32, "sizeof(BFu64_BFs64_BFu64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFs64_BFu64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_sll(1LL<<63), "BFu64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFu64_BFs64_BFu64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_ull(1LL<<63), "BFu64_BFs64_BFu64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFs64_BFu64_BFu64, BFu64_BFs64_BFu64_BFu64)
//============================================================================


struct  BFu64_BFu64  {
  __tsu64 v1:64;
  __tsu64 v2:64;
};
//SIG(1 BFu64_BFu64) C1{ FL:64 FL:64}



static void Test_BFu64_BFu64()
{
  {
    init_simple_test("BFu64_BFu64");
    static STRUCT_IF_C BFu64_BFu64 lv;
    check2(sizeof(lv), 16, "sizeof(BFu64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFu64, BFu64_BFu64)
//============================================================================


struct  BFu64_BFu64_BFs64  {
  __tsu64 v1:64;
  __tsu64 v2:64;
  signed __tsi64 v3:64;
};
//SIG(1 BFu64_BFu64_BFs64) C1{ FL:64 FL:64 FL:64}



static void Test_BFu64_BFu64_BFs64()
{
  {
    init_simple_test("BFu64_BFu64_BFs64");
    static STRUCT_IF_C BFu64_BFu64_BFs64 lv;
    check2(sizeof(lv), 24, "sizeof(BFu64_BFu64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFu64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFu64_BFu64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFu64_BFs64, BFu64_BFu64_BFs64)
//============================================================================


struct  BFu64_BFu64_BFs64_BFs64  {
  __tsu64 v1:64;
  __tsu64 v2:64;
  signed __tsi64 v3:64;
  signed __tsi64 v4:64;
};
//SIG(1 BFu64_BFu64_BFs64_BFs64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFu64_BFu64_BFs64_BFs64()
{
  {
    init_simple_test("BFu64_BFu64_BFs64_BFs64");
    static STRUCT_IF_C BFu64_BFu64_BFs64_BFs64 lv;
    check2(sizeof(lv), 32, "sizeof(BFu64_BFu64_BFs64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFu64_BFs64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFu64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFu64_BFu64_BFs64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_sll(1LL<<63), "BFu64_BFu64_BFs64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFu64_BFs64_BFs64, BFu64_BFu64_BFs64_BFs64)
//============================================================================


struct  BFu64_BFu64_BFs64_BFu64  {
  __tsu64 v1:64;
  __tsu64 v2:64;
  signed __tsi64 v3:64;
  __tsu64 v4:64;
};
//SIG(1 BFu64_BFu64_BFs64_BFu64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFu64_BFu64_BFs64_BFu64()
{
  {
    init_simple_test("BFu64_BFu64_BFs64_BFu64");
    static STRUCT_IF_C BFu64_BFu64_BFs64_BFu64 lv;
    check2(sizeof(lv), 32, "sizeof(BFu64_BFu64_BFs64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFu64_BFs64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_sll(1LL<<63), "BFu64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFu64_BFu64_BFs64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFs64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFu64_BFs64_BFu64, BFu64_BFu64_BFs64_BFu64)
//============================================================================


struct  BFu64_BFu64_BFu64  {
  __tsu64 v1:64;
  __tsu64 v2:64;
  __tsu64 v3:64;
};
//SIG(1 BFu64_BFu64_BFu64) C1{ FL:64 FL:64 FL:64}



static void Test_BFu64_BFu64_BFu64()
{
  {
    init_simple_test("BFu64_BFu64_BFu64");
    static STRUCT_IF_C BFu64_BFu64_BFu64 lv;
    check2(sizeof(lv), 24, "sizeof(BFu64_BFu64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFu64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFu64_BFu64, BFu64_BFu64_BFu64)
//============================================================================


struct  BFu64_BFu64_BFu64_BFs64  {
  __tsu64 v1:64;
  __tsu64 v2:64;
  __tsu64 v3:64;
  signed __tsi64 v4:64;
};
//SIG(1 BFu64_BFu64_BFu64_BFs64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFu64_BFu64_BFu64_BFs64()
{
  {
    init_simple_test("BFu64_BFu64_BFu64_BFs64");
    static STRUCT_IF_C BFu64_BFu64_BFu64_BFs64 lv;
    check2(sizeof(lv), 32, "sizeof(BFu64_BFu64_BFu64_BFs64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFu64_BFu64_BFs64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFu64_BFu64_BFu64_BFs64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_sll(1LL<<63), "BFu64_BFu64_BFu64_BFs64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFu64_BFu64_BFs64, BFu64_BFu64_BFu64_BFs64)
//============================================================================


struct  BFu64_BFu64_BFu64_BFu64  {
  __tsu64 v1:64;
  __tsu64 v2:64;
  __tsu64 v3:64;
  __tsu64 v4:64;
};
//SIG(1 BFu64_BFu64_BFu64_BFu64) C1{ FL:64 FL:64 FL:64 FL:64}



static void Test_BFu64_BFu64_BFu64_BFu64()
{
  {
    init_simple_test("BFu64_BFu64_BFu64_BFu64");
    static STRUCT_IF_C BFu64_BFu64_BFu64_BFu64 lv;
    check2(sizeof(lv), 32, "sizeof(BFu64_BFu64_BFu64_BFu64)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu64_BFu64_BFu64_BFu64)");
    set_bf_and_test(lv, v1, 0, 0, 64, 1, "BFu64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v1, 0, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, 1, "BFu64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v2, 8, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, 1, "BFu64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v3, 16, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, 1, "BFu64_BFu64_BFu64_BFu64");
    set_bf_and_test(lv, v4, 24, 0, 64, hide_ull(1LL<<63), "BFu64_BFu64_BFu64_BFu64");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu64_BFu64_BFu64_BFu64, BFu64_BFu64_BFu64_BFu64)
//============================================================================


struct  BFu7c  {
  unsigned char v1:7;
};
//SIG(1 BFu7c) C1{ Fc:7}



static void Test_BFu7c()
{
  {
    init_simple_test("BFu7c");
    static STRUCT_IF_C BFu7c lv;
    check2(sizeof(lv), 1, "sizeof(BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c, BFu7c)
//============================================================================


struct  BFu7c_BFs7c  {
  unsigned char v1:7;
  signed char v2:7;
};
//SIG(1 BFu7c_BFs7c) C1{ Fc:7 Fc:7}



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


struct  BFu7c_BFs7c_BFs7c  {
  unsigned char v1:7;
  signed char v2:7;
  signed char v3:7;
};
//SIG(1 BFu7c_BFs7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7}



static void Test_BFu7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFs7c_BFs7c, BFu7c_BFs7c_BFs7c)
//============================================================================


struct  BFu7c_BFs7c_BFs7c_BFs7c  {
  unsigned char v1:7;
  signed char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7c_BFs7c_BFs7i  {
  unsigned char v1:7;
  signed char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7c_BFs7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7c_BFs7c_BFs7ll  {
  unsigned char v1:7;
  signed char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7c_BFs7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



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


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



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


struct  BFu7c_BFs7c_BFs7c_BFu7c  {
  unsigned char v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7c_BFs7c_BFu7i  {
  unsigned char v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7c_BFu7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7c_BFs7c_BFu7ll  {
  unsigned char v1:7;
  signed char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7c_BFu7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



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


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



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


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



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


struct  BFu7c_BFs7c_BFs7i_BFs7c  {
  unsigned char v1:7;
  signed char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7i_BFs7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7c_BFs7i_BFs7i  {
  unsigned char v1:7;
  signed char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7i_BFs7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7c_BFs7i_BFs7ll  {
  unsigned char v1:7;
  signed char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7i_BFs7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7c_BFs7i_BFu7c  {
  unsigned char v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7i_BFu7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7c_BFs7i_BFu7i  {
  unsigned char v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7i_BFu7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7c_BFs7i_BFu7ll  {
  unsigned char v1:7;
  signed char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7i_BFu7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7c_BFs7ll  {
  unsigned char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7c_BFs7c_BFs7ll) C1{ Fc:7 Fc:7 FL:7}



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


struct  BFu7c_BFs7c_BFs7ll_BFs7c  {
  unsigned char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7ll_BFs7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7c_BFs7ll_BFs7i  {
  unsigned char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7ll_BFs7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7c_BFs7ll_BFs7ll  {
  unsigned char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7ll_BFs7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



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


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



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


struct  BFu7c_BFs7c_BFs7ll_BFu7c  {
  unsigned char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7ll_BFu7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7c_BFs7ll_BFu7i  {
  unsigned char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7ll_BFu7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7c_BFs7ll_BFu7ll  {
  unsigned char v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFs7ll_BFu7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu7c_BFs7c_BFu7c  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFs7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7}



static void Test_BFu7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFs7c_BFu7c, BFu7c_BFs7c_BFu7c)
//============================================================================


struct  BFu7c_BFs7c_BFu7c_BFs7c  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7c_BFu7c_BFs7i  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7c_BFs7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7c_BFu7c_BFs7ll  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7c_BFs7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



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


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



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


struct  BFu7c_BFs7c_BFu7c_BFu7c  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7c_BFu7c_BFu7i  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7c_BFu7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7c_BFu7c_BFu7ll  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7c_BFu7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



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


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



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


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



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


struct  BFu7c_BFs7c_BFu7i_BFs7c  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7i_BFs7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7c_BFu7i_BFs7i  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7i_BFs7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7c_BFu7i_BFs7ll  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7i_BFs7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7c_BFu7i_BFu7c  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7i_BFu7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7c_BFu7i_BFu7i  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7i_BFu7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7c_BFu7i_BFu7ll  {
  unsigned char v1:7;
  signed char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7i_BFu7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



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


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



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


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



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


struct  BFu7c_BFs7c_BFu7ll_BFs7c  {
  unsigned char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7ll_BFs7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7c_BFu7ll_BFs7i  {
  unsigned char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7ll_BFs7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7c_BFu7ll_BFs7ll  {
  unsigned char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7ll_BFs7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



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


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



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


struct  BFu7c_BFs7c_BFu7ll_BFu7c  {
  unsigned char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7ll_BFu7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7c_BFu7ll_BFu7i  {
  unsigned char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7ll_BFu7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7c_BFu7ll_BFu7ll  {
  unsigned char v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7c_BFu7ll_BFu7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu7c_BFs7i  {
  unsigned char v1:7;
  signed int v2:7;
};
//SIG(1 BFu7c_BFs7i) C1{ Fc:7 Fi:7}



static void Test_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFs7i, BFu7c_BFs7i)
//============================================================================


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



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


struct  BFu7c_BFs7i_BFs7c_BFs7c  {
  unsigned char v1:7;
  signed int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7c_BFs7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7i_BFs7c_BFs7i  {
  unsigned char v1:7;
  signed int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7c_BFs7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7i_BFs7c_BFs7ll  {
  unsigned char v1:7;
  signed int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7c_BFs7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



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


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



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


struct  BFu7c_BFs7i_BFs7c_BFu7c  {
  unsigned char v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7c_BFu7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7i_BFs7c_BFu7i  {
  unsigned char v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7c_BFu7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7i_BFs7c_BFu7ll  {
  unsigned char v1:7;
  signed int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7c_BFu7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



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


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



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


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



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


struct  BFu7c_BFs7i_BFs7i_BFs7c  {
  unsigned char v1:7;
  signed int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7i_BFs7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7i_BFs7i_BFs7i  {
  unsigned char v1:7;
  signed int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7i_BFs7i_BFs7ll  {
  unsigned char v1:7;
  signed int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7i_BFs7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7i_BFs7i_BFu7c  {
  unsigned char v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7i_BFu7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7i_BFs7i_BFu7i  {
  unsigned char v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7i_BFs7i_BFu7ll  {
  unsigned char v1:7;
  signed int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7i_BFu7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7i_BFs7ll  {
  unsigned char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7c_BFs7i_BFs7ll) C1{ Fc:7 Fi:7 FL:7}



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


struct  BFu7c_BFs7i_BFs7ll_BFs7c  {
  unsigned char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7ll_BFs7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7i_BFs7ll_BFs7i  {
  unsigned char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7ll_BFs7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7i_BFs7ll_BFs7ll  {
  unsigned char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7ll_BFs7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



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


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



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


struct  BFu7c_BFs7i_BFs7ll_BFu7c  {
  unsigned char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7ll_BFu7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7i_BFs7ll_BFu7i  {
  unsigned char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7ll_BFu7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7i_BFs7ll_BFu7ll  {
  unsigned char v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFs7ll_BFu7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu7c_BFs7i_BFu7c_BFs7c  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7c_BFs7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7i_BFu7c_BFs7i  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7c_BFs7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7i_BFu7c_BFs7ll  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7c_BFs7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



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


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



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


struct  BFu7c_BFs7i_BFu7c_BFu7c  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7c_BFu7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7i_BFu7c_BFu7i  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7c_BFu7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7i_BFu7c_BFu7ll  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7c_BFu7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



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


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



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


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



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


struct  BFu7c_BFs7i_BFu7i_BFs7c  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7i_BFs7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7i_BFu7i_BFs7i  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7i_BFu7i_BFs7ll  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7i_BFs7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7i_BFu7i_BFu7c  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7i_BFu7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7i_BFu7i_BFu7i  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7i_BFu7i_BFu7ll  {
  unsigned char v1:7;
  signed int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7i_BFu7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7i_BFu7ll  {
  unsigned char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFs7i_BFu7ll) C1{ Fc:7 Fi:7 FL:7}



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


struct  BFu7c_BFs7i_BFu7ll_BFs7c  {
  unsigned char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7ll_BFs7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7i_BFu7ll_BFs7i  {
  unsigned char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7ll_BFs7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7i_BFu7ll_BFs7ll  {
  unsigned char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7ll_BFs7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



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


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



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


struct  BFu7c_BFs7i_BFu7ll_BFu7c  {
  unsigned char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7ll_BFu7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7i_BFu7ll_BFu7i  {
  unsigned char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7ll_BFu7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7i_BFu7ll_BFu7ll  {
  unsigned char v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7i_BFu7ll_BFu7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu7c_BFs7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
};
//SIG(1 BFu7c_BFs7ll) C1{ Fc:7 FL:7}



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


struct  BFu7c_BFs7ll_BFs7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7c) C1{ Fc:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFs7c_BFs7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7c_BFs7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFs7c_BFs7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7c_BFs7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFs7c_BFs7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7c_BFs7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFs7c_BFu7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7c_BFu7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFs7c_BFu7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7c_BFu7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFs7c_BFu7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7c_BFu7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFs7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7i) C1{ Fc:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFs7i_BFs7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7i_BFs7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFs7i_BFs7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7i_BFs7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFs7i_BFs7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7i_BFs7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFs7i_BFu7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7i_BFu7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFs7i_BFu7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7i_BFu7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFs7i_BFu7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7i_BFu7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFs7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7}



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


struct  BFu7c_BFs7ll_BFs7ll_BFs7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7ll_BFs7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFs7ll_BFs7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7ll_BFs7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFs7ll_BFs7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFs7ll_BFu7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7ll_BFu7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFs7ll_BFu7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7ll_BFu7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFs7ll_BFu7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFs7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu7c_BFs7ll_BFu7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7c) C1{ Fc:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFu7c_BFs7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7c_BFs7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFu7c_BFs7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7c_BFs7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFu7c_BFs7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7c_BFs7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFu7c_BFu7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7c_BFu7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFu7c_BFu7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7c_BFu7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFu7c_BFu7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7c_BFu7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFu7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7i) C1{ Fc:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFu7i_BFs7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7i_BFs7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFu7i_BFs7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7i_BFs7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFu7i_BFs7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7i_BFs7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFu7i_BFu7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7i_BFu7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFu7i_BFu7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7i_BFu7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFu7i_BFu7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7i_BFu7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFu7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7}



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


struct  BFu7c_BFs7ll_BFu7ll_BFs7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7ll_BFs7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFu7ll_BFs7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7ll_BFs7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFu7ll_BFs7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



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


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



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


struct  BFu7c_BFs7ll_BFu7ll_BFu7c  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7ll_BFu7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



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


struct  BFu7c_BFs7ll_BFu7ll_BFu7i  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7ll_BFu7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



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


struct  BFu7c_BFs7ll_BFu7ll_BFu7ll  {
  unsigned char v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFs7ll_BFu7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


struct  BFu7c_BFs7s  {
  unsigned char v1:7;
  signed short v2:7;
};
//SIG(1 BFu7c_BFs7s) C1{ Fc:7 Fs:7}



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



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


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



static void Test_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu15i");
    static STRUCT_IF_C BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i, BFu7c_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu15i, BFu7c_BFu15i_BFu15i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu15s, BFu7c_BFu15i_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu16i, BFu7c_BFu15i_BFu16i)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu7c_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu16ll, BFu7c_BFu15i_BFu16ll)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu16s, BFu7c_BFu15i_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu17i, BFu7c_BFu15i_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu7c_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu17ll, BFu7c_BFu15i_BFu17ll)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7c_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu1c, BFu7c_BFu15i_BFu1c)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7c_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu1i, BFu7c_BFu15i_BFu1i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7c_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu1s, BFu7c_BFu15i_BFu1s)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu31i, BFu7c_BFu15i_BFu31i)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu7c_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu7c_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu31ll, BFu7c_BFu15i_BFu31ll)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu32i, BFu7c_BFu15i_BFu32i)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu7c_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu7c_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu32ll, BFu7c_BFu15i_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu33");
    static STRUCT_IF_C BFu7c_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu7c_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu7c_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu33, BFu7c_BFu15i_BFu33)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu7c, BFu7c_BFu15i_BFu7c)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7c_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu7i, BFu7c_BFu15i_BFu7i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7c_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu7s, BFu7c_BFu15i_BFu7s)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu8c, BFu7c_BFu15i_BFu8c)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7c_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu8i, BFu7c_BFu15i_BFu8i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7c_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu8s, BFu7c_BFu15i_BFu8s)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7c_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu9i, BFu7c_BFu15i_BFu9i)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7c_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu9ll, BFu7c_BFu15i_BFu9ll)
//============================================================================


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



static void Test_BFu7c_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu15i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7c_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_BFu9s, BFu7c_BFu15i_BFu9s)
//============================================================================


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



static void Test_BFu7c_BFu15i_C()
{
  {
    init_simple_test("BFu7c_BFu15i_C");
    static STRUCT_IF_C BFu7c_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_C");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_C");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_C");
    check_field_offset(lv, v3, 3, "BFu7c_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_C, BFu7c_BFu15i_C)
//============================================================================


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



static void Test_BFu7c_BFu15i_D()
{
  {
    init_simple_test("BFu7c_BFu15i_D");
    static STRUCT_IF_C BFu7c_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_D");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_D");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_D, BFu7c_BFu15i_D)
//============================================================================


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



static void Test_BFu7c_BFu15i_F()
{
  {
    init_simple_test("BFu7c_BFu15i_F");
    static STRUCT_IF_C BFu7c_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_F");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_F");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_F, BFu7c_BFu15i_F)
//============================================================================


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



static void Test_BFu7c_BFu15i_I()
{
  {
    init_simple_test("BFu7c_BFu15i_I");
    static STRUCT_IF_C BFu7c_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_I");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_I");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_I, BFu7c_BFu15i_I)
//============================================================================


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



static void Test_BFu7c_BFu15i_Ip()
{
  {
    init_simple_test("BFu7c_BFu15i_Ip");
    static STRUCT_IF_C BFu7c_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_Ip, BFu7c_BFu15i_Ip)
//============================================================================


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



static void Test_BFu7c_BFu15i_L()
{
  {
    init_simple_test("BFu7c_BFu15i_L");
    static STRUCT_IF_C BFu7c_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_L");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_L");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_L, BFu7c_BFu15i_L)
//============================================================================


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



static void Test_BFu7c_BFu15i_S()
{
  {
    init_simple_test("BFu7c_BFu15i_S");
    static STRUCT_IF_C BFu7c_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_S");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_S");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_S, BFu7c_BFu15i_S)
//============================================================================


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



static void Test_BFu7c_BFu15i_Uc()
{
  {
    init_simple_test("BFu7c_BFu15i_Uc");
    static STRUCT_IF_C BFu7c_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_Uc");
    check_field_offset(lv, v3, 3, "BFu7c_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_Uc, BFu7c_BFu15i_Uc)
//============================================================================


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



static void Test_BFu7c_BFu15i_Ui()
{
  {
    init_simple_test("BFu7c_BFu15i_Ui");
    static STRUCT_IF_C BFu7c_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_Ui, BFu7c_BFu15i_Ui)
//============================================================================


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



static void Test_BFu7c_BFu15i_Ul()
{
  {
    init_simple_test("BFu7c_BFu15i_Ul");
    static STRUCT_IF_C BFu7c_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_Ul, BFu7c_BFu15i_Ul)
//============================================================================


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



static void Test_BFu7c_BFu15i_Us()
{
  {
    init_simple_test("BFu7c_BFu15i_Us");
    static STRUCT_IF_C BFu7c_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_Us, BFu7c_BFu15i_Us)
//============================================================================


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



static void Test_BFu7c_BFu15i_Vp()
{
  {
    init_simple_test("BFu7c_BFu15i_Vp");
    static STRUCT_IF_C BFu7c_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15i_Vp, BFu7c_BFu15i_Vp)
//============================================================================


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



static void Test_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll, BFu7c_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu15i, BFu7c_BFu15ll_BFu15i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu15s, BFu7c_BFu15ll_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu16i, BFu7c_BFu15ll_BFu16i)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu7c_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu16ll, BFu7c_BFu15ll_BFu16ll)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu16s, BFu7c_BFu15ll_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu17i, BFu7c_BFu15ll_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu7c_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu17ll, BFu7c_BFu15ll_BFu17ll)
//============================================================================


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



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


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



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


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



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


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



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


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



static void Test_BFu7c_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu31i, BFu7c_BFu15ll_BFu31i)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu7c_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu7c_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu31ll, BFu7c_BFu15ll_BFu31ll)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu32i, BFu7c_BFu15ll_BFu32i)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu7c_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu7c_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu32ll, BFu7c_BFu15ll_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu7c_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu7c_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu33, BFu7c_BFu15ll_BFu33)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu7c, BFu7c_BFu15ll_BFu7c)
//============================================================================


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



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


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



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


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



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


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



static void Test_BFu7c_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu8c, BFu7c_BFu15ll_BFu8c)
//============================================================================


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



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


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



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


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



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


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



static void Test_BFu7c_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7c_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu9i, BFu7c_BFu15ll_BFu9i)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7c_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu9ll, BFu7c_BFu15ll_BFu9ll)
//============================================================================


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



static void Test_BFu7c_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7c_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_BFu9s, BFu7c_BFu15ll_BFu9s)
//============================================================================


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



static void Test_BFu7c_BFu15ll_C()
{
  {
    init_simple_test("BFu7c_BFu15ll_C");
    static STRUCT_IF_C BFu7c_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_C");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_C");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_C");
    check_field_offset(lv, v3, 3, "BFu7c_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_C, BFu7c_BFu15ll_C)
//============================================================================


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



static void Test_BFu7c_BFu15ll_D()
{
  {
    init_simple_test("BFu7c_BFu15ll_D");
    static STRUCT_IF_C BFu7c_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_D");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_D");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_D, BFu7c_BFu15ll_D)
//============================================================================


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



static void Test_BFu7c_BFu15ll_F()
{
  {
    init_simple_test("BFu7c_BFu15ll_F");
    static STRUCT_IF_C BFu7c_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_F");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_F");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_F, BFu7c_BFu15ll_F)
//============================================================================


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



static void Test_BFu7c_BFu15ll_I()
{
  {
    init_simple_test("BFu7c_BFu15ll_I");
    static STRUCT_IF_C BFu7c_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_I");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_I");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_I, BFu7c_BFu15ll_I)
//============================================================================


struct  BFu7c_BFu15ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu7c_BFu15ll_Ip) C1{ Fc:7 FL:15 Fp}



static void Test_BFu7c_BFu15ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu15ll_Ip");
    static STRUCT_IF_C BFu7c_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_Ip, BFu7c_BFu15ll_Ip)
//============================================================================


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



static void Test_BFu7c_BFu15ll_L()
{
  {
    init_simple_test("BFu7c_BFu15ll_L");
    static STRUCT_IF_C BFu7c_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_L");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_L");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_L, BFu7c_BFu15ll_L)
//============================================================================


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



static void Test_BFu7c_BFu15ll_S()
{
  {
    init_simple_test("BFu7c_BFu15ll_S");
    static STRUCT_IF_C BFu7c_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_S");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_S");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_S, BFu7c_BFu15ll_S)
//============================================================================


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



static void Test_BFu7c_BFu15ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu15ll_Uc");
    static STRUCT_IF_C BFu7c_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7c_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_Uc, BFu7c_BFu15ll_Uc)
//============================================================================


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



static void Test_BFu7c_BFu15ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu15ll_Ui");
    static STRUCT_IF_C BFu7c_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_Ui, BFu7c_BFu15ll_Ui)
//============================================================================


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



static void Test_BFu7c_BFu15ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu15ll_Ul");
    static STRUCT_IF_C BFu7c_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_Ul, BFu7c_BFu15ll_Ul)
//============================================================================


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



static void Test_BFu7c_BFu15ll_Us()
{
  {
    init_simple_test("BFu7c_BFu15ll_Us");
    static STRUCT_IF_C BFu7c_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_Us, BFu7c_BFu15ll_Us)
//============================================================================


struct  BFu7c_BFu15ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu7c_BFu15ll_Vp) C1{ Fc:7 FL:15 Fp}



static void Test_BFu7c_BFu15ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu15ll_Vp");
    static STRUCT_IF_C BFu7c_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7c_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15ll_Vp, BFu7c_BFu15ll_Vp)
//============================================================================


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



static void Test_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu15s");
    static STRUCT_IF_C BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s, BFu7c_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu15i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu15i, BFu7c_BFu15s_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu7c_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu15ll, BFu7c_BFu15s_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu15s");
    static STRUCT_IF_C BFu7c_BFu15s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu15s, BFu7c_BFu15s_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu16i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu16i, BFu7c_BFu15s_BFu16i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu7c_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu16ll, BFu7c_BFu15s_BFu16ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu16s");
    static STRUCT_IF_C BFu7c_BFu15s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu16s, BFu7c_BFu15s_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu17i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu17i, BFu7c_BFu15s_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu7c_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu17ll, BFu7c_BFu15s_BFu17ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu1c");
    static STRUCT_IF_C BFu7c_BFu15s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7c_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu1c, BFu7c_BFu15s_BFu1c)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu1i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7c_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu1i, BFu7c_BFu15s_BFu1i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7c_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu1ll, BFu7c_BFu15s_BFu1ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu1s");
    static STRUCT_IF_C BFu7c_BFu15s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu15s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7c_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu1s, BFu7c_BFu15s_BFu1s)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu31i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu31i, BFu7c_BFu15s_BFu31i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu7c_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu31ll, BFu7c_BFu15s_BFu31ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu32i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu32i, BFu7c_BFu15s_BFu32i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu7c_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu32ll, BFu7c_BFu15s_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu33()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu33");
    static STRUCT_IF_C BFu7c_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu7c_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu33, BFu7c_BFu15s_BFu33)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu15s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu7c, BFu7c_BFu15s_BFu7c)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu7i, BFu7c_BFu15s_BFu7i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu7c_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu7ll, BFu7c_BFu15s_BFu7ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu15s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu7s, BFu7c_BFu15s_BFu7s)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu8c");
    static STRUCT_IF_C BFu7c_BFu15s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu8c, BFu7c_BFu15s_BFu8c)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu8i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu8i, BFu7c_BFu15s_BFu8i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu7c_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu8ll, BFu7c_BFu15s_BFu8ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu8s");
    static STRUCT_IF_C BFu7c_BFu15s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu8s, BFu7c_BFu15s_BFu8s)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu9i");
    static STRUCT_IF_C BFu7c_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu9i, BFu7c_BFu15s_BFu9i)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu7c_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu9ll, BFu7c_BFu15s_BFu9ll)
//============================================================================


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



static void Test_BFu7c_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu15s_BFu9s");
    static STRUCT_IF_C BFu7c_BFu15s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_BFu9s, BFu7c_BFu15s_BFu9s)
//============================================================================


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



static void Test_BFu7c_BFu15s_C()
{
  {
    init_simple_test("BFu7c_BFu15s_C");
    static STRUCT_IF_C BFu7c_BFu15s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_C, BFu7c_BFu15s_C)
//============================================================================


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



static void Test_BFu7c_BFu15s_D()
{
  {
    init_simple_test("BFu7c_BFu15s_D");
    static STRUCT_IF_C BFu7c_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_D, BFu7c_BFu15s_D)
//============================================================================


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



static void Test_BFu7c_BFu15s_F()
{
  {
    init_simple_test("BFu7c_BFu15s_F");
    static STRUCT_IF_C BFu7c_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_F, BFu7c_BFu15s_F)
//============================================================================


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



static void Test_BFu7c_BFu15s_I()
{
  {
    init_simple_test("BFu7c_BFu15s_I");
    static STRUCT_IF_C BFu7c_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_I, BFu7c_BFu15s_I)
//============================================================================


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



static void Test_BFu7c_BFu15s_Ip()
{
  {
    init_simple_test("BFu7c_BFu15s_Ip");
    static STRUCT_IF_C BFu7c_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_Ip, BFu7c_BFu15s_Ip)
//============================================================================


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



static void Test_BFu7c_BFu15s_L()
{
  {
    init_simple_test("BFu7c_BFu15s_L");
    static STRUCT_IF_C BFu7c_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_L, BFu7c_BFu15s_L)
//============================================================================


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



static void Test_BFu7c_BFu15s_S()
{
  {
    init_simple_test("BFu7c_BFu15s_S");
    static STRUCT_IF_C BFu7c_BFu15s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_S, BFu7c_BFu15s_S)
//============================================================================


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



static void Test_BFu7c_BFu15s_Uc()
{
  {
    init_simple_test("BFu7c_BFu15s_Uc");
    static STRUCT_IF_C BFu7c_BFu15s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_Uc, BFu7c_BFu15s_Uc)
//============================================================================


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



static void Test_BFu7c_BFu15s_Ui()
{
  {
    init_simple_test("BFu7c_BFu15s_Ui");
    static STRUCT_IF_C BFu7c_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_Ui, BFu7c_BFu15s_Ui)
//============================================================================


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



static void Test_BFu7c_BFu15s_Ul()
{
  {
    init_simple_test("BFu7c_BFu15s_Ul");
    static STRUCT_IF_C BFu7c_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_Ul, BFu7c_BFu15s_Ul)
//============================================================================


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



static void Test_BFu7c_BFu15s_Us()
{
  {
    init_simple_test("BFu7c_BFu15s_Us");
    static STRUCT_IF_C BFu7c_BFu15s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu15s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu7c_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_Us, BFu7c_BFu15s_Us)
//============================================================================


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



static void Test_BFu7c_BFu15s_Vp()
{
  {
    init_simple_test("BFu7c_BFu15s_Vp");
    static STRUCT_IF_C BFu7c_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7c_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu15s_Vp, BFu7c_BFu15s_Vp)
//============================================================================


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



static void Test_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu16i");
    static STRUCT_IF_C BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i, BFu7c_BFu16i)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu15i, BFu7c_BFu16i_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu7c_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu15ll, BFu7c_BFu16i_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu15s, BFu7c_BFu16i_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu16i, BFu7c_BFu16i_BFu16i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu16s, BFu7c_BFu16i_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu17i, BFu7c_BFu16i_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu7c_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu17ll, BFu7c_BFu16i_BFu17ll)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7c_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu1c, BFu7c_BFu16i_BFu1c)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7c_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu1i, BFu7c_BFu16i_BFu1i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7c_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu1s, BFu7c_BFu16i_BFu1s)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu31i, BFu7c_BFu16i_BFu31i)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu7c_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu31ll, BFu7c_BFu16i_BFu31ll)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu32i, BFu7c_BFu16i_BFu32i)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu7c_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu32ll, BFu7c_BFu16i_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu33");
    static STRUCT_IF_C BFu7c_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu7c_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu33, BFu7c_BFu16i_BFu33)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu7c, BFu7c_BFu16i_BFu7c)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7c_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu7i, BFu7c_BFu16i_BFu7i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7c_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu7s, BFu7c_BFu16i_BFu7s)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu8c, BFu7c_BFu16i_BFu8c)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7c_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu8i, BFu7c_BFu16i_BFu8i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7c_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu8s, BFu7c_BFu16i_BFu8s)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu16i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7c_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu9i, BFu7c_BFu16i_BFu9i)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7c_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu9ll, BFu7c_BFu16i_BFu9ll)
//============================================================================


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



static void Test_BFu7c_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu16i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu16i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7c_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_BFu9s, BFu7c_BFu16i_BFu9s)
//============================================================================


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



static void Test_BFu7c_BFu16i_C()
{
  {
    init_simple_test("BFu7c_BFu16i_C");
    static STRUCT_IF_C BFu7c_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_C");
    check_field_offset(lv, v3, 3, "BFu7c_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_C, BFu7c_BFu16i_C)
//============================================================================


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



static void Test_BFu7c_BFu16i_D()
{
  {
    init_simple_test("BFu7c_BFu16i_D");
    static STRUCT_IF_C BFu7c_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_D, BFu7c_BFu16i_D)
//============================================================================


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



static void Test_BFu7c_BFu16i_F()
{
  {
    init_simple_test("BFu7c_BFu16i_F");
    static STRUCT_IF_C BFu7c_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_F, BFu7c_BFu16i_F)
//============================================================================


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



static void Test_BFu7c_BFu16i_I()
{
  {
    init_simple_test("BFu7c_BFu16i_I");
    static STRUCT_IF_C BFu7c_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_I, BFu7c_BFu16i_I)
//============================================================================


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



static void Test_BFu7c_BFu16i_Ip()
{
  {
    init_simple_test("BFu7c_BFu16i_Ip");
    static STRUCT_IF_C BFu7c_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_Ip, BFu7c_BFu16i_Ip)
//============================================================================


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



static void Test_BFu7c_BFu16i_L()
{
  {
    init_simple_test("BFu7c_BFu16i_L");
    static STRUCT_IF_C BFu7c_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_L, BFu7c_BFu16i_L)
//============================================================================


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



static void Test_BFu7c_BFu16i_S()
{
  {
    init_simple_test("BFu7c_BFu16i_S");
    static STRUCT_IF_C BFu7c_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_S");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_S, BFu7c_BFu16i_S)
//============================================================================


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



static void Test_BFu7c_BFu16i_Uc()
{
  {
    init_simple_test("BFu7c_BFu16i_Uc");
    static STRUCT_IF_C BFu7c_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_Uc");
    check_field_offset(lv, v3, 3, "BFu7c_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_Uc, BFu7c_BFu16i_Uc)
//============================================================================


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



static void Test_BFu7c_BFu16i_Ui()
{
  {
    init_simple_test("BFu7c_BFu16i_Ui");
    static STRUCT_IF_C BFu7c_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_Ui, BFu7c_BFu16i_Ui)
//============================================================================


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



static void Test_BFu7c_BFu16i_Ul()
{
  {
    init_simple_test("BFu7c_BFu16i_Ul");
    static STRUCT_IF_C BFu7c_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_Ul, BFu7c_BFu16i_Ul)
//============================================================================


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



static void Test_BFu7c_BFu16i_Us()
{
  {
    init_simple_test("BFu7c_BFu16i_Us");
    static STRUCT_IF_C BFu7c_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_Us");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_Us, BFu7c_BFu16i_Us)
//============================================================================


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



static void Test_BFu7c_BFu16i_Vp()
{
  {
    init_simple_test("BFu7c_BFu16i_Vp");
    static STRUCT_IF_C BFu7c_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16i_Vp, BFu7c_BFu16i_Vp)
//============================================================================


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



static void Test_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll, BFu7c_BFu16ll)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu15i, BFu7c_BFu16ll_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu7c_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu15ll, BFu7c_BFu16ll_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu15s, BFu7c_BFu16ll_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu16i, BFu7c_BFu16ll_BFu16i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu16s, BFu7c_BFu16ll_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu17i, BFu7c_BFu16ll_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu7c_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu17ll, BFu7c_BFu16ll_BFu17ll)
//============================================================================


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



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


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



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


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



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


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



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


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



static void Test_BFu7c_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu31i, BFu7c_BFu16ll_BFu31i)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu7c_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu31ll, BFu7c_BFu16ll_BFu31ll)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu32i, BFu7c_BFu16ll_BFu32i)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu7c_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu32ll, BFu7c_BFu16ll_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu7c_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu33, BFu7c_BFu16ll_BFu33)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu7c, BFu7c_BFu16ll_BFu7c)
//============================================================================


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



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


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



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


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



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


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



static void Test_BFu7c_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu8c, BFu7c_BFu16ll_BFu8c)
//============================================================================


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



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


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



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


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



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


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



static void Test_BFu7c_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7c_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu9i, BFu7c_BFu16ll_BFu9i)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7c_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu9ll, BFu7c_BFu16ll_BFu9ll)
//============================================================================


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



static void Test_BFu7c_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7c_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_BFu9s, BFu7c_BFu16ll_BFu9s)
//============================================================================


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



static void Test_BFu7c_BFu16ll_C()
{
  {
    init_simple_test("BFu7c_BFu16ll_C");
    static STRUCT_IF_C BFu7c_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_C");
    check_field_offset(lv, v3, 3, "BFu7c_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_C, BFu7c_BFu16ll_C)
//============================================================================


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



static void Test_BFu7c_BFu16ll_D()
{
  {
    init_simple_test("BFu7c_BFu16ll_D");
    static STRUCT_IF_C BFu7c_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_D, BFu7c_BFu16ll_D)
//============================================================================


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



static void Test_BFu7c_BFu16ll_F()
{
  {
    init_simple_test("BFu7c_BFu16ll_F");
    static STRUCT_IF_C BFu7c_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_F, BFu7c_BFu16ll_F)
//============================================================================


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



static void Test_BFu7c_BFu16ll_I()
{
  {
    init_simple_test("BFu7c_BFu16ll_I");
    static STRUCT_IF_C BFu7c_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_I, BFu7c_BFu16ll_I)
//============================================================================


struct  BFu7c_BFu16ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu7c_BFu16ll_Ip) C1{ Fc:7 FL:16 Fp}



static void Test_BFu7c_BFu16ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu16ll_Ip");
    static STRUCT_IF_C BFu7c_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_Ip, BFu7c_BFu16ll_Ip)
//============================================================================


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



static void Test_BFu7c_BFu16ll_L()
{
  {
    init_simple_test("BFu7c_BFu16ll_L");
    static STRUCT_IF_C BFu7c_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_L, BFu7c_BFu16ll_L)
//============================================================================


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



static void Test_BFu7c_BFu16ll_S()
{
  {
    init_simple_test("BFu7c_BFu16ll_S");
    static STRUCT_IF_C BFu7c_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_S");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_S, BFu7c_BFu16ll_S)
//============================================================================


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



static void Test_BFu7c_BFu16ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu16ll_Uc");
    static STRUCT_IF_C BFu7c_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7c_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_Uc, BFu7c_BFu16ll_Uc)
//============================================================================


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



static void Test_BFu7c_BFu16ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu16ll_Ui");
    static STRUCT_IF_C BFu7c_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_Ui, BFu7c_BFu16ll_Ui)
//============================================================================


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



static void Test_BFu7c_BFu16ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu16ll_Ul");
    static STRUCT_IF_C BFu7c_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_Ul, BFu7c_BFu16ll_Ul)
//============================================================================


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



static void Test_BFu7c_BFu16ll_Us()
{
  {
    init_simple_test("BFu7c_BFu16ll_Us");
    static STRUCT_IF_C BFu7c_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_Us, BFu7c_BFu16ll_Us)
//============================================================================


struct  BFu7c_BFu16ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu7c_BFu16ll_Vp) C1{ Fc:7 FL:16 Fp}



static void Test_BFu7c_BFu16ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu16ll_Vp");
    static STRUCT_IF_C BFu7c_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7c_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16ll_Vp, BFu7c_BFu16ll_Vp)
//============================================================================


struct  BFu7c_BFu16s  {
  unsigned char v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu7c_BFu16s) C1{ Fc:7 Fs:16}



static void Test_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu16s");
    static STRUCT_IF_C BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s, BFu7c_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu15i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu15i, BFu7c_BFu16s_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu15ll, BFu7c_BFu16s_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu15s");
    static STRUCT_IF_C BFu7c_BFu16s_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu15s, BFu7c_BFu16s_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu16i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu16i, BFu7c_BFu16s_BFu16i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu16s");
    static STRUCT_IF_C BFu7c_BFu16s_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu16s, BFu7c_BFu16s_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu17i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu17i, BFu7c_BFu16s_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu17ll, BFu7c_BFu16s_BFu17ll)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu1c");
    static STRUCT_IF_C BFu7c_BFu16s_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu1c, BFu7c_BFu16s_BFu1c)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu1i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu1i, BFu7c_BFu16s_BFu1i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu1s");
    static STRUCT_IF_C BFu7c_BFu16s_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu1s, BFu7c_BFu16s_BFu1s)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu31i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu31i, BFu7c_BFu16s_BFu31i)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu31ll, BFu7c_BFu16s_BFu31ll)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu32i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu32i, BFu7c_BFu16s_BFu32i)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu32ll, BFu7c_BFu16s_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu33()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu33");
    static STRUCT_IF_C BFu7c_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7c_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7c_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu33, BFu7c_BFu16s_BFu33)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu16s_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu7c, BFu7c_BFu16s_BFu7c)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu7i, BFu7c_BFu16s_BFu7i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu16s_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu7s, BFu7c_BFu16s_BFu7s)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu8c");
    static STRUCT_IF_C BFu7c_BFu16s_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu8c, BFu7c_BFu16s_BFu8c)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu8i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu8i, BFu7c_BFu16s_BFu8i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu8s");
    static STRUCT_IF_C BFu7c_BFu16s_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu8s, BFu7c_BFu16s_BFu8s)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu9i");
    static STRUCT_IF_C BFu7c_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu9i, BFu7c_BFu16s_BFu9i)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu9ll, BFu7c_BFu16s_BFu9ll)
//============================================================================


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



static void Test_BFu7c_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu16s_BFu9s");
    static STRUCT_IF_C BFu7c_BFu16s_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_BFu9s, BFu7c_BFu16s_BFu9s)
//============================================================================


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



static void Test_BFu7c_BFu16s_C()
{
  {
    init_simple_test("BFu7c_BFu16s_C");
    static STRUCT_IF_C BFu7c_BFu16s_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_C");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_C, BFu7c_BFu16s_C)
//============================================================================


struct  BFu7c_BFu16s_D  {
  unsigned char v1:7;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu7c_BFu16s_D) C1{ Fc:7 Fs:16 FL}



static void Test_BFu7c_BFu16s_D()
{
  {
    init_simple_test("BFu7c_BFu16s_D");
    static STRUCT_IF_C BFu7c_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_D, BFu7c_BFu16s_D)
//============================================================================


struct  BFu7c_BFu16s_F  {
  unsigned char v1:7;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu7c_BFu16s_F) C1{ Fc:7 Fs:16 Fi}



static void Test_BFu7c_BFu16s_F()
{
  {
    init_simple_test("BFu7c_BFu16s_F");
    static STRUCT_IF_C BFu7c_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_F, BFu7c_BFu16s_F)
//============================================================================


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



static void Test_BFu7c_BFu16s_I()
{
  {
    init_simple_test("BFu7c_BFu16s_I");
    static STRUCT_IF_C BFu7c_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_I, BFu7c_BFu16s_I)
//============================================================================


struct  BFu7c_BFu16s_Ip  {
  unsigned char v1:7;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu7c_BFu16s_Ip) C1{ Fc:7 Fs:16 Fp}



static void Test_BFu7c_BFu16s_Ip()
{
  {
    init_simple_test("BFu7c_BFu16s_Ip");
    static STRUCT_IF_C BFu7c_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_Ip, BFu7c_BFu16s_Ip)
//============================================================================


struct  BFu7c_BFu16s_L  {
  unsigned char v1:7;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu16s_L) C1{ Fc:7 Fs:16 FL}



static void Test_BFu7c_BFu16s_L()
{
  {
    init_simple_test("BFu7c_BFu16s_L");
    static STRUCT_IF_C BFu7c_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_L, BFu7c_BFu16s_L)
//============================================================================


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



static void Test_BFu7c_BFu16s_S()
{
  {
    init_simple_test("BFu7c_BFu16s_S");
    static STRUCT_IF_C BFu7c_BFu16s_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_S");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_S, BFu7c_BFu16s_S)
//============================================================================


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



static void Test_BFu7c_BFu16s_Uc()
{
  {
    init_simple_test("BFu7c_BFu16s_Uc");
    static STRUCT_IF_C BFu7c_BFu16s_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_Uc, BFu7c_BFu16s_Uc)
//============================================================================


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



static void Test_BFu7c_BFu16s_Ui()
{
  {
    init_simple_test("BFu7c_BFu16s_Ui");
    static STRUCT_IF_C BFu7c_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_Ui, BFu7c_BFu16s_Ui)
//============================================================================


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



static void Test_BFu7c_BFu16s_Ul()
{
  {
    init_simple_test("BFu7c_BFu16s_Ul");
    static STRUCT_IF_C BFu7c_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_Ul, BFu7c_BFu16s_Ul)
//============================================================================


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



static void Test_BFu7c_BFu16s_Us()
{
  {
    init_simple_test("BFu7c_BFu16s_Us");
    static STRUCT_IF_C BFu7c_BFu16s_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_BFu16s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_Us");
    check_field_offset(lv, v3, 4, "BFu7c_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_Us, BFu7c_BFu16s_Us)
//============================================================================


struct  BFu7c_BFu16s_Vp  {
  unsigned char v1:7;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu7c_BFu16s_Vp) C1{ Fc:7 Fs:16 Fp}



static void Test_BFu7c_BFu16s_Vp()
{
  {
    init_simple_test("BFu7c_BFu16s_Vp");
    static STRUCT_IF_C BFu7c_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7c_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu16s_Vp, BFu7c_BFu16s_Vp)
//============================================================================


struct  BFu7c_BFu17i  {
  unsigned char v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu7c_BFu17i) C1{ Fc:7 Fi:17}



static void Test_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu17i");
    static STRUCT_IF_C BFu7c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i, BFu7c_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu15i, BFu7c_BFu17i_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu7c_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu15ll, BFu7c_BFu17i_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu15s, BFu7c_BFu17i_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu16i, BFu7c_BFu17i_BFu16i)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu7c_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu16ll, BFu7c_BFu17i_BFu16ll)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu16s, BFu7c_BFu17i_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu17i, BFu7c_BFu17i_BFu17i)
//============================================================================


struct  BFu7c_BFu17i_BFu17ll  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu17i_BFu17ll) C1{ Fc:7 Fi:17 FL:17}



static void Test_BFu7c_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu7c_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu17ll, BFu7c_BFu17i_BFu17ll)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7c_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu1c, BFu7c_BFu17i_BFu1c)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7c_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu1i, BFu7c_BFu17i_BFu1i)
//============================================================================


struct  BFu7c_BFu17i_BFu1ll  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu17i_BFu1ll) C1{ Fc:7 Fi:17 FL:1}



static void Test_BFu7c_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7c_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu1ll, BFu7c_BFu17i_BFu1ll)
//============================================================================


struct  BFu7c_BFu17i_BFu1s  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu17i_BFu1s) C1{ Fc:7 Fi:17 Fs:1}



static void Test_BFu7c_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7c_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu1s, BFu7c_BFu17i_BFu1s)
//============================================================================


struct  BFu7c_BFu17i_BFu31i  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu17i_BFu31i) C1{ Fc:7 Fi:17 Fi:31}



static void Test_BFu7c_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu31i, BFu7c_BFu17i_BFu31i)
//============================================================================


struct  BFu7c_BFu17i_BFu31ll  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu17i_BFu31ll) C1{ Fc:7 Fi:17 FL:31}



static void Test_BFu7c_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu7c_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu31ll, BFu7c_BFu17i_BFu31ll)
//============================================================================


struct  BFu7c_BFu17i_BFu32i  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu17i_BFu32i) C1{ Fc:7 Fi:17 Fi:32}



static void Test_BFu7c_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu32i, BFu7c_BFu17i_BFu32i)
//============================================================================


struct  BFu7c_BFu17i_BFu32ll  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu17i_BFu32ll) C1{ Fc:7 Fi:17 FL:32}



static void Test_BFu7c_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu7c_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu32ll, BFu7c_BFu17i_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu33");
    static STRUCT_IF_C BFu7c_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu7c_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu33, BFu7c_BFu17i_BFu33)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu7c, BFu7c_BFu17i_BFu7c)
//============================================================================


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



static void Test_BFu7c_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu7i, BFu7c_BFu17i_BFu7i)
//============================================================================


struct  BFu7c_BFu17i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu17i_BFu7ll) C1{ Fc:7 Fi:17 FL:7}



static void Test_BFu7c_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu7ll, BFu7c_BFu17i_BFu7ll)
//============================================================================


struct  BFu7c_BFu17i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu17i_BFu7s) C1{ Fc:7 Fi:17 Fs:7}



static void Test_BFu7c_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu7s, BFu7c_BFu17i_BFu7s)
//============================================================================


struct  BFu7c_BFu17i_BFu8c  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu17i_BFu8c) C1{ Fc:7 Fi:17 Fc:8}



static void Test_BFu7c_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu17i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu8c, BFu7c_BFu17i_BFu8c)
//============================================================================


struct  BFu7c_BFu17i_BFu8i  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu17i_BFu8i) C1{ Fc:7 Fi:17 Fi:8}



static void Test_BFu7c_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu8i, BFu7c_BFu17i_BFu8i)
//============================================================================


struct  BFu7c_BFu17i_BFu8ll  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu17i_BFu8ll) C1{ Fc:7 Fi:17 FL:8}



static void Test_BFu7c_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu8ll, BFu7c_BFu17i_BFu8ll)
//============================================================================


struct  BFu7c_BFu17i_BFu8s  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu17i_BFu8s) C1{ Fc:7 Fi:17 Fs:8}



static void Test_BFu7c_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu17i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu8s, BFu7c_BFu17i_BFu8s)
//============================================================================


struct  BFu7c_BFu17i_BFu9i  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu17i_BFu9i) C1{ Fc:7 Fi:17 Fi:9}



static void Test_BFu7c_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu9i, BFu7c_BFu17i_BFu9i)
//============================================================================


struct  BFu7c_BFu17i_BFu9ll  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu17i_BFu9ll) C1{ Fc:7 Fi:17 FL:9}



static void Test_BFu7c_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu7c_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu9ll, BFu7c_BFu17i_BFu9ll)
//============================================================================


struct  BFu7c_BFu17i_BFu9s  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu17i_BFu9s) C1{ Fc:7 Fi:17 Fs:9}



static void Test_BFu7c_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu17i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_BFu9s, BFu7c_BFu17i_BFu9s)
//============================================================================


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



static void Test_BFu7c_BFu17i_C()
{
  {
    init_simple_test("BFu7c_BFu17i_C");
    static STRUCT_IF_C BFu7c_BFu17i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_C");
    check_field_offset(lv, v3, 3, "BFu7c_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_C, BFu7c_BFu17i_C)
//============================================================================


struct  BFu7c_BFu17i_D  {
  unsigned char v1:7;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu7c_BFu17i_D) C1{ Fc:7 Fi:17 FL}



static void Test_BFu7c_BFu17i_D()
{
  {
    init_simple_test("BFu7c_BFu17i_D");
    static STRUCT_IF_C BFu7c_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_D, BFu7c_BFu17i_D)
//============================================================================


struct  BFu7c_BFu17i_F  {
  unsigned char v1:7;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu7c_BFu17i_F) C1{ Fc:7 Fi:17 Fi}



static void Test_BFu7c_BFu17i_F()
{
  {
    init_simple_test("BFu7c_BFu17i_F");
    static STRUCT_IF_C BFu7c_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_F, BFu7c_BFu17i_F)
//============================================================================


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



static void Test_BFu7c_BFu17i_I()
{
  {
    init_simple_test("BFu7c_BFu17i_I");
    static STRUCT_IF_C BFu7c_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_I, BFu7c_BFu17i_I)
//============================================================================


struct  BFu7c_BFu17i_Ip  {
  unsigned char v1:7;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu7c_BFu17i_Ip) C1{ Fc:7 Fi:17 Fp}



static void Test_BFu7c_BFu17i_Ip()
{
  {
    init_simple_test("BFu7c_BFu17i_Ip");
    static STRUCT_IF_C BFu7c_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_Ip, BFu7c_BFu17i_Ip)
//============================================================================


struct  BFu7c_BFu17i_L  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu17i_L) C1{ Fc:7 Fi:17 FL}



static void Test_BFu7c_BFu17i_L()
{
  {
    init_simple_test("BFu7c_BFu17i_L");
    static STRUCT_IF_C BFu7c_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_L, BFu7c_BFu17i_L)
//============================================================================


struct  BFu7c_BFu17i_S  {
  unsigned char v1:7;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu7c_BFu17i_S) C1{ Fc:7 Fi:17 Fs}



static void Test_BFu7c_BFu17i_S()
{
  {
    init_simple_test("BFu7c_BFu17i_S");
    static STRUCT_IF_C BFu7c_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_S");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_S, BFu7c_BFu17i_S)
//============================================================================


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



static void Test_BFu7c_BFu17i_Uc()
{
  {
    init_simple_test("BFu7c_BFu17i_Uc");
    static STRUCT_IF_C BFu7c_BFu17i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_Uc");
    check_field_offset(lv, v3, 3, "BFu7c_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_Uc, BFu7c_BFu17i_Uc)
//============================================================================


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



static void Test_BFu7c_BFu17i_Ui()
{
  {
    init_simple_test("BFu7c_BFu17i_Ui");
    static STRUCT_IF_C BFu7c_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_Ui, BFu7c_BFu17i_Ui)
//============================================================================


struct  BFu7c_BFu17i_Ul  {
  unsigned char v1:7;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu17i_Ul) C1{ Fc:7 Fi:17 FL}



static void Test_BFu7c_BFu17i_Ul()
{
  {
    init_simple_test("BFu7c_BFu17i_Ul");
    static STRUCT_IF_C BFu7c_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_Ul, BFu7c_BFu17i_Ul)
//============================================================================


struct  BFu7c_BFu17i_Us  {
  unsigned char v1:7;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu17i_Us) C1{ Fc:7 Fi:17 Fs}



static void Test_BFu7c_BFu17i_Us()
{
  {
    init_simple_test("BFu7c_BFu17i_Us");
    static STRUCT_IF_C BFu7c_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_Us");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_Us, BFu7c_BFu17i_Us)
//============================================================================


struct  BFu7c_BFu17i_Vp  {
  unsigned char v1:7;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu7c_BFu17i_Vp) C1{ Fc:7 Fi:17 Fp}



static void Test_BFu7c_BFu17i_Vp()
{
  {
    init_simple_test("BFu7c_BFu17i_Vp");
    static STRUCT_IF_C BFu7c_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17i_Vp, BFu7c_BFu17i_Vp)
//============================================================================


struct  BFu7c_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu7c_BFu17ll) C1{ Fc:7 FL:17}



static void Test_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll, BFu7c_BFu17ll)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu15i, BFu7c_BFu17ll_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu7c_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu15ll, BFu7c_BFu17ll_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu15s, BFu7c_BFu17ll_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu16i, BFu7c_BFu17ll_BFu16i)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu7c_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu16ll, BFu7c_BFu17ll_BFu16ll)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu16s, BFu7c_BFu17ll_BFu16s)
//============================================================================


struct  BFu7c_BFu17ll_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu17ll_BFu17i) C1{ Fc:7 FL:17 Fi:17}



static void Test_BFu7c_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu17i, BFu7c_BFu17ll_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu7c_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu17ll, BFu7c_BFu17ll_BFu17ll)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7c_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu1c, BFu7c_BFu17ll_BFu1c)
//============================================================================


struct  BFu7c_BFu17ll_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu17ll_BFu1i) C1{ Fc:7 FL:17 Fi:1}



static void Test_BFu7c_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7c_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu1i, BFu7c_BFu17ll_BFu1i)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7c_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu1ll, BFu7c_BFu17ll_BFu1ll)
//============================================================================


struct  BFu7c_BFu17ll_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu17ll_BFu1s) C1{ Fc:7 FL:17 Fs:1}



static void Test_BFu7c_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7c_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu1s, BFu7c_BFu17ll_BFu1s)
//============================================================================


struct  BFu7c_BFu17ll_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu17ll_BFu31i) C1{ Fc:7 FL:17 Fi:31}



static void Test_BFu7c_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu31i, BFu7c_BFu17ll_BFu31i)
//============================================================================


struct  BFu7c_BFu17ll_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu17ll_BFu31ll) C1{ Fc:7 FL:17 FL:31}



static void Test_BFu7c_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu7c_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu31ll, BFu7c_BFu17ll_BFu31ll)
//============================================================================


struct  BFu7c_BFu17ll_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu17ll_BFu32i) C1{ Fc:7 FL:17 Fi:32}



static void Test_BFu7c_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu32i, BFu7c_BFu17ll_BFu32i)
//============================================================================


struct  BFu7c_BFu17ll_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu17ll_BFu32ll) C1{ Fc:7 FL:17 FL:32}



static void Test_BFu7c_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu7c_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu32ll, BFu7c_BFu17ll_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu7c_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu33, BFu7c_BFu17ll_BFu33)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu7c, BFu7c_BFu17ll_BFu7c)
//============================================================================


struct  BFu7c_BFu17ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu17ll_BFu7i) C1{ Fc:7 FL:17 Fi:7}



static void Test_BFu7c_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu7i, BFu7c_BFu17ll_BFu7i)
//============================================================================


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



static void Test_BFu7c_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu7ll, BFu7c_BFu17ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu17ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu17ll_BFu7s) C1{ Fc:7 FL:17 Fs:7}



static void Test_BFu7c_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7c_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu7s, BFu7c_BFu17ll_BFu7s)
//============================================================================


struct  BFu7c_BFu17ll_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu17ll_BFu8c) C1{ Fc:7 FL:17 Fc:8}



static void Test_BFu7c_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu8c, BFu7c_BFu17ll_BFu8c)
//============================================================================


struct  BFu7c_BFu17ll_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu17ll_BFu8i) C1{ Fc:7 FL:17 Fi:8}



static void Test_BFu7c_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu8i, BFu7c_BFu17ll_BFu8i)
//============================================================================


struct  BFu7c_BFu17ll_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu17ll_BFu8ll) C1{ Fc:7 FL:17 FL:8}



static void Test_BFu7c_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu8ll, BFu7c_BFu17ll_BFu8ll)
//============================================================================


struct  BFu7c_BFu17ll_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu17ll_BFu8s) C1{ Fc:7 FL:17 Fs:8}



static void Test_BFu7c_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7c_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu8s, BFu7c_BFu17ll_BFu8s)
//============================================================================


struct  BFu7c_BFu17ll_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu17ll_BFu9i) C1{ Fc:7 FL:17 Fi:9}



static void Test_BFu7c_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu9i, BFu7c_BFu17ll_BFu9i)
//============================================================================


struct  BFu7c_BFu17ll_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu17ll_BFu9ll) C1{ Fc:7 FL:17 FL:9}



static void Test_BFu7c_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu7c_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu9ll, BFu7c_BFu17ll_BFu9ll)
//============================================================================


struct  BFu7c_BFu17ll_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu17ll_BFu9s) C1{ Fc:7 FL:17 Fs:9}



static void Test_BFu7c_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_BFu9s, BFu7c_BFu17ll_BFu9s)
//============================================================================


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



static void Test_BFu7c_BFu17ll_C()
{
  {
    init_simple_test("BFu7c_BFu17ll_C");
    static STRUCT_IF_C BFu7c_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_C");
    check_field_offset(lv, v3, 3, "BFu7c_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_C, BFu7c_BFu17ll_C)
//============================================================================


struct  BFu7c_BFu17ll_D  {
  unsigned char v1:7;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu7c_BFu17ll_D) C1{ Fc:7 FL:17 FL}



static void Test_BFu7c_BFu17ll_D()
{
  {
    init_simple_test("BFu7c_BFu17ll_D");
    static STRUCT_IF_C BFu7c_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_D, BFu7c_BFu17ll_D)
//============================================================================


struct  BFu7c_BFu17ll_F  {
  unsigned char v1:7;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu7c_BFu17ll_F) C1{ Fc:7 FL:17 Fi}



static void Test_BFu7c_BFu17ll_F()
{
  {
    init_simple_test("BFu7c_BFu17ll_F");
    static STRUCT_IF_C BFu7c_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_F, BFu7c_BFu17ll_F)
//============================================================================


struct  BFu7c_BFu17ll_I  {
  unsigned char v1:7;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu7c_BFu17ll_I) C1{ Fc:7 FL:17 Fi}



static void Test_BFu7c_BFu17ll_I()
{
  {
    init_simple_test("BFu7c_BFu17ll_I");
    static STRUCT_IF_C BFu7c_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_I, BFu7c_BFu17ll_I)
//============================================================================


struct  BFu7c_BFu17ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu7c_BFu17ll_Ip) C1{ Fc:7 FL:17 Fp}



static void Test_BFu7c_BFu17ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu17ll_Ip");
    static STRUCT_IF_C BFu7c_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_Ip, BFu7c_BFu17ll_Ip)
//============================================================================


struct  BFu7c_BFu17ll_L  {
  unsigned char v1:7;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu17ll_L) C1{ Fc:7 FL:17 FL}



static void Test_BFu7c_BFu17ll_L()
{
  {
    init_simple_test("BFu7c_BFu17ll_L");
    static STRUCT_IF_C BFu7c_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_L, BFu7c_BFu17ll_L)
//============================================================================


struct  BFu7c_BFu17ll_S  {
  unsigned char v1:7;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu7c_BFu17ll_S) C1{ Fc:7 FL:17 Fs}



static void Test_BFu7c_BFu17ll_S()
{
  {
    init_simple_test("BFu7c_BFu17ll_S");
    static STRUCT_IF_C BFu7c_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_S");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_S, BFu7c_BFu17ll_S)
//============================================================================


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



static void Test_BFu7c_BFu17ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu17ll_Uc");
    static STRUCT_IF_C BFu7c_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7c_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_Uc, BFu7c_BFu17ll_Uc)
//============================================================================


struct  BFu7c_BFu17ll_Ui  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu17ll_Ui) C1{ Fc:7 FL:17 Fi}



static void Test_BFu7c_BFu17ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu17ll_Ui");
    static STRUCT_IF_C BFu7c_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_Ui, BFu7c_BFu17ll_Ui)
//============================================================================


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



static void Test_BFu7c_BFu17ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu17ll_Ul");
    static STRUCT_IF_C BFu7c_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_Ul, BFu7c_BFu17ll_Ul)
//============================================================================


struct  BFu7c_BFu17ll_Us  {
  unsigned char v1:7;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu17ll_Us) C1{ Fc:7 FL:17 Fs}



static void Test_BFu7c_BFu17ll_Us()
{
  {
    init_simple_test("BFu7c_BFu17ll_Us");
    static STRUCT_IF_C BFu7c_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "BFu7c_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_Us, BFu7c_BFu17ll_Us)
//============================================================================


struct  BFu7c_BFu17ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu7c_BFu17ll_Vp) C1{ Fc:7 FL:17 Fp}



static void Test_BFu7c_BFu17ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu17ll_Vp");
    static STRUCT_IF_C BFu7c_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7c_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu17ll_Vp, BFu7c_BFu17ll_Vp)
//============================================================================


struct  BFu7c_BFu1c  {
  unsigned char v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu7c_BFu1c) C1{ Fc:7 Fc:1}



static void Test_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu1c");
    static STRUCT_IF_C BFu7c_BFu1c lv;
    check2(sizeof(lv), 1, "sizeof(BFu7c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c, BFu7c_BFu1c)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu15i");
    static STRUCT_IF_C BFu7c_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7c_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu15i, BFu7c_BFu1c_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7c_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu15ll, BFu7c_BFu1c_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu15s");
    static STRUCT_IF_C BFu7c_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu15s, BFu7c_BFu1c_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu16i");
    static STRUCT_IF_C BFu7c_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7c_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu16i, BFu7c_BFu1c_BFu16i)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7c_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu16ll, BFu7c_BFu1c_BFu16ll)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu16s");
    static STRUCT_IF_C BFu7c_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu16s, BFu7c_BFu1c_BFu16s)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu17i");
    static STRUCT_IF_C BFu7c_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7c_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu17i, BFu7c_BFu1c_BFu17i)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7c_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu17ll, BFu7c_BFu1c_BFu17ll)
//============================================================================


struct  BFu7c_BFu1c_BFu1c  {
  unsigned char v1:7;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu1c_BFu1c) C1{ Fc:7 Fc:1 Fc:1}



static void Test_BFu7c_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu1c");
    static STRUCT_IF_C BFu7c_BFu1c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu1c, BFu7c_BFu1c_BFu1c)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu1i");
    static STRUCT_IF_C BFu7c_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu1i, BFu7c_BFu1c_BFu1i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu1s");
    static STRUCT_IF_C BFu7c_BFu1c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu1s, BFu7c_BFu1c_BFu1s)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu31i");
    static STRUCT_IF_C BFu7c_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu31i, BFu7c_BFu1c_BFu31i)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7c_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu31ll, BFu7c_BFu1c_BFu31ll)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu32i");
    static STRUCT_IF_C BFu7c_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu32i, BFu7c_BFu1c_BFu32i)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7c_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu32ll, BFu7c_BFu1c_BFu32ll)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu33()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu33");
    static STRUCT_IF_C BFu7c_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7c_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu33, BFu7c_BFu1c_BFu33)
//============================================================================


struct  BFu7c_BFu1c_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu1c_BFu7c) C1{ Fc:7 Fc:1 Fc:7}



static void Test_BFu7c_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu1c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu7c, BFu7c_BFu1c_BFu7c)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu7i, BFu7c_BFu1c_BFu7i)
//============================================================================


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



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


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



static void Test_BFu7c_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu1c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu7s, BFu7c_BFu1c_BFu7s)
//============================================================================


struct  BFu7c_BFu1c_BFu8c  {
  unsigned char v1:7;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu1c_BFu8c) C1{ Fc:7 Fc:1 Fc:8}



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


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



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


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



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


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



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


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



static void Test_BFu7c_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu9i");
    static STRUCT_IF_C BFu7c_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7c_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu9i, BFu7c_BFu1c_BFu9i)
//============================================================================


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



static void Test_BFu7c_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7c_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_BFu9ll, BFu7c_BFu1c_BFu9ll)
//============================================================================


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



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


struct  BFu7c_BFu1c_C  {
  unsigned char v1:7;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu7c_BFu1c_C) C1{ Fc:7 Fc:1 Fc}



static void Test_BFu7c_BFu1c_C()
{
  {
    init_simple_test("BFu7c_BFu1c_C");
    static STRUCT_IF_C BFu7c_BFu1c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_C");
    check_field_offset(lv, v3, 1, "BFu7c_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_C, BFu7c_BFu1c_C)
//============================================================================


struct  BFu7c_BFu1c_D  {
  unsigned char v1:7;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu7c_BFu1c_D) C1{ Fc:7 Fc:1 FL}



static void Test_BFu7c_BFu1c_D()
{
  {
    init_simple_test("BFu7c_BFu1c_D");
    static STRUCT_IF_C BFu7c_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_D, BFu7c_BFu1c_D)
//============================================================================


struct  BFu7c_BFu1c_F  {
  unsigned char v1:7;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu7c_BFu1c_F) C1{ Fc:7 Fc:1 Fi}



static void Test_BFu7c_BFu1c_F()
{
  {
    init_simple_test("BFu7c_BFu1c_F");
    static STRUCT_IF_C BFu7c_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_F, BFu7c_BFu1c_F)
//============================================================================


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



static void Test_BFu7c_BFu1c_I()
{
  {
    init_simple_test("BFu7c_BFu1c_I");
    static STRUCT_IF_C BFu7c_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_I, BFu7c_BFu1c_I)
//============================================================================


struct  BFu7c_BFu1c_Ip  {
  unsigned char v1:7;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu7c_BFu1c_Ip) C1{ Fc:7 Fc:1 Fp}



static void Test_BFu7c_BFu1c_Ip()
{
  {
    init_simple_test("BFu7c_BFu1c_Ip");
    static STRUCT_IF_C BFu7c_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_Ip, BFu7c_BFu1c_Ip)
//============================================================================


struct  BFu7c_BFu1c_L  {
  unsigned char v1:7;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu1c_L) C1{ Fc:7 Fc:1 FL}



static void Test_BFu7c_BFu1c_L()
{
  {
    init_simple_test("BFu7c_BFu1c_L");
    static STRUCT_IF_C BFu7c_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_L, BFu7c_BFu1c_L)
//============================================================================


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



static void Test_BFu7c_BFu1c_S()
{
  {
    init_simple_test("BFu7c_BFu1c_S");
    static STRUCT_IF_C BFu7c_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_S, BFu7c_BFu1c_S)
//============================================================================


struct  BFu7c_BFu1c_Uc  {
  unsigned char v1:7;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu1c_Uc) C1{ Fc:7 Fc:1 Fc}



static void Test_BFu7c_BFu1c_Uc()
{
  {
    init_simple_test("BFu7c_BFu1c_Uc");
    static STRUCT_IF_C BFu7c_BFu1c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_Uc");
    check_field_offset(lv, v3, 1, "BFu7c_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_Uc, BFu7c_BFu1c_Uc)
//============================================================================


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



static void Test_BFu7c_BFu1c_Ui()
{
  {
    init_simple_test("BFu7c_BFu1c_Ui");
    static STRUCT_IF_C BFu7c_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_Ui, BFu7c_BFu1c_Ui)
//============================================================================


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



static void Test_BFu7c_BFu1c_Ul()
{
  {
    init_simple_test("BFu7c_BFu1c_Ul");
    static STRUCT_IF_C BFu7c_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_Ul, BFu7c_BFu1c_Ul)
//============================================================================


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



static void Test_BFu7c_BFu1c_Us()
{
  {
    init_simple_test("BFu7c_BFu1c_Us");
    static STRUCT_IF_C BFu7c_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_Us, BFu7c_BFu1c_Us)
//============================================================================


struct  BFu7c_BFu1c_Vp  {
  unsigned char v1:7;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu7c_BFu1c_Vp) C1{ Fc:7 Fc:1 Fp}



static void Test_BFu7c_BFu1c_Vp()
{
  {
    init_simple_test("BFu7c_BFu1c_Vp");
    static STRUCT_IF_C BFu7c_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1c_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1c_Vp, BFu7c_BFu1c_Vp)
//============================================================================


struct  BFu7c_BFu1i  {
  unsigned char v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu7c_BFu1i) C1{ Fc:7 Fi:1}



static void Test_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu1i");
    static STRUCT_IF_C BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i, BFu7c_BFu1i)
//============================================================================


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



static void Test_BFu7c_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7c_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu15i, BFu7c_BFu1i_BFu15i)
//============================================================================


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



static void Test_BFu7c_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7c_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu15ll, BFu7c_BFu1i_BFu15ll)
//============================================================================


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



static void Test_BFu7c_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu15s, BFu7c_BFu1i_BFu15s)
//============================================================================


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



static void Test_BFu7c_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7c_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu16i, BFu7c_BFu1i_BFu16i)
//============================================================================


struct  BFu7c_BFu1i_BFu16ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu1i_BFu16ll) C1{ Fc:7 Fi:1 FL:16}



static void Test_BFu7c_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7c_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu16ll, BFu7c_BFu1i_BFu16ll)
//============================================================================


struct  BFu7c_BFu1i_BFu16s  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu1i_BFu16s) C1{ Fc:7 Fi:1 Fs:16}



static void Test_BFu7c_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu16s, BFu7c_BFu1i_BFu16s)
//============================================================================


struct  BFu7c_BFu1i_BFu17i  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu1i_BFu17i) C1{ Fc:7 Fi:1 Fi:17}



static void Test_BFu7c_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7c_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu17i, BFu7c_BFu1i_BFu17i)
//============================================================================


struct  BFu7c_BFu1i_BFu17ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu1i_BFu17ll) C1{ Fc:7 Fi:1 FL:17}



static void Test_BFu7c_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7c_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu17ll, BFu7c_BFu1i_BFu17ll)
//============================================================================


struct  BFu7c_BFu1i_BFu1c  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu1i_BFu1c) C1{ Fc:7 Fi:1 Fc:1}



static void Test_BFu7c_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu1c, BFu7c_BFu1i_BFu1c)
//============================================================================


struct  BFu7c_BFu1i_BFu1i  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu1i_BFu1i) C1{ Fc:7 Fi:1 Fi:1}



static void Test_BFu7c_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu1i, BFu7c_BFu1i_BFu1i)
//============================================================================


struct  BFu7c_BFu1i_BFu1ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu1i_BFu1ll) C1{ Fc:7 Fi:1 FL:1}



static void Test_BFu7c_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu1ll, BFu7c_BFu1i_BFu1ll)
//============================================================================


struct  BFu7c_BFu1i_BFu1s  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu1i_BFu1s) C1{ Fc:7 Fi:1 Fs:1}



static void Test_BFu7c_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu1s, BFu7c_BFu1i_BFu1s)
//============================================================================


struct  BFu7c_BFu1i_BFu31i  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu1i_BFu31i) C1{ Fc:7 Fi:1 Fi:31}



static void Test_BFu7c_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu31i, BFu7c_BFu1i_BFu31i)
//============================================================================


struct  BFu7c_BFu1i_BFu31ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu1i_BFu31ll) C1{ Fc:7 Fi:1 FL:31}



static void Test_BFu7c_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7c_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu31ll, BFu7c_BFu1i_BFu31ll)
//============================================================================


struct  BFu7c_BFu1i_BFu32i  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu1i_BFu32i) C1{ Fc:7 Fi:1 Fi:32}



static void Test_BFu7c_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu32i, BFu7c_BFu1i_BFu32i)
//============================================================================


struct  BFu7c_BFu1i_BFu32ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu1i_BFu32ll) C1{ Fc:7 Fi:1 FL:32}



static void Test_BFu7c_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7c_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu32ll, BFu7c_BFu1i_BFu32ll)
//============================================================================


struct  BFu7c_BFu1i_BFu33  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu1i_BFu33) C1{ Fc:7 Fi:1 FL:33}



static void Test_BFu7c_BFu1i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu33");
    static STRUCT_IF_C BFu7c_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7c_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu33, BFu7c_BFu1i_BFu33)
//============================================================================


struct  BFu7c_BFu1i_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu1i_BFu7c) C1{ Fc:7 Fi:1 Fc:7}



static void Test_BFu7c_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu7c, BFu7c_BFu1i_BFu7c)
//============================================================================


struct  BFu7c_BFu1i_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu1i_BFu7i) C1{ Fc:7 Fi:1 Fi:7}



static void Test_BFu7c_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu7i, BFu7c_BFu1i_BFu7i)
//============================================================================


struct  BFu7c_BFu1i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu1i_BFu7ll) C1{ Fc:7 Fi:1 FL:7}



static void Test_BFu7c_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu7ll, BFu7c_BFu1i_BFu7ll)
//============================================================================


struct  BFu7c_BFu1i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu1i_BFu7s) C1{ Fc:7 Fi:1 Fs:7}



static void Test_BFu7c_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu7s, BFu7c_BFu1i_BFu7s)
//============================================================================


struct  BFu7c_BFu1i_BFu8c  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu1i_BFu8c) C1{ Fc:7 Fi:1 Fc:8}



static void Test_BFu7c_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu8c, BFu7c_BFu1i_BFu8c)
//============================================================================


struct  BFu7c_BFu1i_BFu8i  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu1i_BFu8i) C1{ Fc:7 Fi:1 Fi:8}



static void Test_BFu7c_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu8i, BFu7c_BFu1i_BFu8i)
//============================================================================


struct  BFu7c_BFu1i_BFu8ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu1i_BFu8ll) C1{ Fc:7 Fi:1 FL:8}



static void Test_BFu7c_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu8ll, BFu7c_BFu1i_BFu8ll)
//============================================================================


struct  BFu7c_BFu1i_BFu8s  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu1i_BFu8s) C1{ Fc:7 Fi:1 Fs:8}



static void Test_BFu7c_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu8s, BFu7c_BFu1i_BFu8s)
//============================================================================


struct  BFu7c_BFu1i_BFu9i  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu1i_BFu9i) C1{ Fc:7 Fi:1 Fi:9}



static void Test_BFu7c_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7c_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu9i, BFu7c_BFu1i_BFu9i)
//============================================================================


struct  BFu7c_BFu1i_BFu9ll  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu1i_BFu9ll) C1{ Fc:7 Fi:1 FL:9}



static void Test_BFu7c_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7c_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu9ll, BFu7c_BFu1i_BFu9ll)
//============================================================================


struct  BFu7c_BFu1i_BFu9s  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu1i_BFu9s) C1{ Fc:7 Fi:1 Fs:9}



static void Test_BFu7c_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu1i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_BFu9s, BFu7c_BFu1i_BFu9s)
//============================================================================


struct  BFu7c_BFu1i_C  {
  unsigned char v1:7;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu7c_BFu1i_C) C1{ Fc:7 Fi:1 Fc}



static void Test_BFu7c_BFu1i_C()
{
  {
    init_simple_test("BFu7c_BFu1i_C");
    static STRUCT_IF_C BFu7c_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_C");
    check_field_offset(lv, v3, 1, "BFu7c_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_C, BFu7c_BFu1i_C)
//============================================================================


struct  BFu7c_BFu1i_D  {
  unsigned char v1:7;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu7c_BFu1i_D) C1{ Fc:7 Fi:1 FL}



static void Test_BFu7c_BFu1i_D()
{
  {
    init_simple_test("BFu7c_BFu1i_D");
    static STRUCT_IF_C BFu7c_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_D, BFu7c_BFu1i_D)
//============================================================================


struct  BFu7c_BFu1i_F  {
  unsigned char v1:7;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu7c_BFu1i_F) C1{ Fc:7 Fi:1 Fi}



static void Test_BFu7c_BFu1i_F()
{
  {
    init_simple_test("BFu7c_BFu1i_F");
    static STRUCT_IF_C BFu7c_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_F, BFu7c_BFu1i_F)
//============================================================================


struct  BFu7c_BFu1i_I  {
  unsigned char v1:7;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu7c_BFu1i_I) C1{ Fc:7 Fi:1 Fi}



static void Test_BFu7c_BFu1i_I()
{
  {
    init_simple_test("BFu7c_BFu1i_I");
    static STRUCT_IF_C BFu7c_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_I, BFu7c_BFu1i_I)
//============================================================================


struct  BFu7c_BFu1i_Ip  {
  unsigned char v1:7;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu7c_BFu1i_Ip) C1{ Fc:7 Fi:1 Fp}



static void Test_BFu7c_BFu1i_Ip()
{
  {
    init_simple_test("BFu7c_BFu1i_Ip");
    static STRUCT_IF_C BFu7c_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_Ip, BFu7c_BFu1i_Ip)
//============================================================================


struct  BFu7c_BFu1i_L  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu1i_L) C1{ Fc:7 Fi:1 FL}



static void Test_BFu7c_BFu1i_L()
{
  {
    init_simple_test("BFu7c_BFu1i_L");
    static STRUCT_IF_C BFu7c_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_L, BFu7c_BFu1i_L)
//============================================================================


struct  BFu7c_BFu1i_S  {
  unsigned char v1:7;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu7c_BFu1i_S) C1{ Fc:7 Fi:1 Fs}



static void Test_BFu7c_BFu1i_S()
{
  {
    init_simple_test("BFu7c_BFu1i_S");
    static STRUCT_IF_C BFu7c_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_S, BFu7c_BFu1i_S)
//============================================================================


struct  BFu7c_BFu1i_Uc  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu1i_Uc) C1{ Fc:7 Fi:1 Fc}



static void Test_BFu7c_BFu1i_Uc()
{
  {
    init_simple_test("BFu7c_BFu1i_Uc");
    static STRUCT_IF_C BFu7c_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_Uc");
    check_field_offset(lv, v3, 1, "BFu7c_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_Uc, BFu7c_BFu1i_Uc)
//============================================================================


struct  BFu7c_BFu1i_Ui  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu1i_Ui) C1{ Fc:7 Fi:1 Fi}



static void Test_BFu7c_BFu1i_Ui()
{
  {
    init_simple_test("BFu7c_BFu1i_Ui");
    static STRUCT_IF_C BFu7c_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_Ui, BFu7c_BFu1i_Ui)
//============================================================================


struct  BFu7c_BFu1i_Ul  {
  unsigned char v1:7;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu1i_Ul) C1{ Fc:7 Fi:1 FL}



static void Test_BFu7c_BFu1i_Ul()
{
  {
    init_simple_test("BFu7c_BFu1i_Ul");
    static STRUCT_IF_C BFu7c_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_Ul, BFu7c_BFu1i_Ul)
//============================================================================


struct  BFu7c_BFu1i_Us  {
  unsigned char v1:7;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu1i_Us) C1{ Fc:7 Fi:1 Fs}



static void Test_BFu7c_BFu1i_Us()
{
  {
    init_simple_test("BFu7c_BFu1i_Us");
    static STRUCT_IF_C BFu7c_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_Us, BFu7c_BFu1i_Us)
//============================================================================


struct  BFu7c_BFu1i_Vp  {
  unsigned char v1:7;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu7c_BFu1i_Vp) C1{ Fc:7 Fi:1 Fp}



static void Test_BFu7c_BFu1i_Vp()
{
  {
    init_simple_test("BFu7c_BFu1i_Vp");
    static STRUCT_IF_C BFu7c_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1i_Vp, BFu7c_BFu1i_Vp)
//============================================================================


struct  BFu7c_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu7c_BFu1ll) C1{ Fc:7 FL:1}



static void Test_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll, BFu7c_BFu1ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu15i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu1ll_BFu15i) C1{ Fc:7 FL:1 Fi:15}



static void Test_BFu7c_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7c_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu15i, BFu7c_BFu1ll_BFu15i)
//============================================================================


struct  BFu7c_BFu1ll_BFu15ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu1ll_BFu15ll) C1{ Fc:7 FL:1 FL:15}



static void Test_BFu7c_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7c_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu15ll, BFu7c_BFu1ll_BFu15ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu15s  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu1ll_BFu15s) C1{ Fc:7 FL:1 Fs:15}



static void Test_BFu7c_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu15s, BFu7c_BFu1ll_BFu15s)
//============================================================================


struct  BFu7c_BFu1ll_BFu16i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu1ll_BFu16i) C1{ Fc:7 FL:1 Fi:16}



static void Test_BFu7c_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7c_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu16i, BFu7c_BFu1ll_BFu16i)
//============================================================================


struct  BFu7c_BFu1ll_BFu16ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu1ll_BFu16ll) C1{ Fc:7 FL:1 FL:16}



static void Test_BFu7c_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7c_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu16ll, BFu7c_BFu1ll_BFu16ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu16s  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu1ll_BFu16s) C1{ Fc:7 FL:1 Fs:16}



static void Test_BFu7c_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu16s, BFu7c_BFu1ll_BFu16s)
//============================================================================


struct  BFu7c_BFu1ll_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu1ll_BFu17i) C1{ Fc:7 FL:1 Fi:17}



static void Test_BFu7c_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7c_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu17i, BFu7c_BFu1ll_BFu17i)
//============================================================================


struct  BFu7c_BFu1ll_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu1ll_BFu17ll) C1{ Fc:7 FL:1 FL:17}



static void Test_BFu7c_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7c_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu17ll, BFu7c_BFu1ll_BFu17ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu1c  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu1ll_BFu1c) C1{ Fc:7 FL:1 Fc:1}



static void Test_BFu7c_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu1c, BFu7c_BFu1ll_BFu1c)
//============================================================================


struct  BFu7c_BFu1ll_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu1ll_BFu1i) C1{ Fc:7 FL:1 Fi:1}



static void Test_BFu7c_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu1i, BFu7c_BFu1ll_BFu1i)
//============================================================================


struct  BFu7c_BFu1ll_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu1ll_BFu1ll) C1{ Fc:7 FL:1 FL:1}



static void Test_BFu7c_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu1ll, BFu7c_BFu1ll_BFu1ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu1ll_BFu1s) C1{ Fc:7 FL:1 Fs:1}



static void Test_BFu7c_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu1s, BFu7c_BFu1ll_BFu1s)
//============================================================================


struct  BFu7c_BFu1ll_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu1ll_BFu31i) C1{ Fc:7 FL:1 Fi:31}



static void Test_BFu7c_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu31i, BFu7c_BFu1ll_BFu31i)
//============================================================================


struct  BFu7c_BFu1ll_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu1ll_BFu31ll) C1{ Fc:7 FL:1 FL:31}



static void Test_BFu7c_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7c_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu31ll, BFu7c_BFu1ll_BFu31ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu1ll_BFu32i) C1{ Fc:7 FL:1 Fi:32}



static void Test_BFu7c_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu32i, BFu7c_BFu1ll_BFu32i)
//============================================================================


struct  BFu7c_BFu1ll_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu1ll_BFu32ll) C1{ Fc:7 FL:1 FL:32}



static void Test_BFu7c_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7c_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu32ll, BFu7c_BFu1ll_BFu32ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu33  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu1ll_BFu33) C1{ Fc:7 FL:1 FL:33}



static void Test_BFu7c_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7c_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu33, BFu7c_BFu1ll_BFu33)
//============================================================================


struct  BFu7c_BFu1ll_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu1ll_BFu7c) C1{ Fc:7 FL:1 Fc:7}



static void Test_BFu7c_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu7c, BFu7c_BFu1ll_BFu7c)
//============================================================================


struct  BFu7c_BFu1ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu1ll_BFu7i) C1{ Fc:7 FL:1 Fi:7}



static void Test_BFu7c_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu7i, BFu7c_BFu1ll_BFu7i)
//============================================================================


struct  BFu7c_BFu1ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu1ll_BFu7ll) C1{ Fc:7 FL:1 FL:7}



static void Test_BFu7c_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu7ll, BFu7c_BFu1ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu1ll_BFu7s) C1{ Fc:7 FL:1 Fs:7}



static void Test_BFu7c_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu7s, BFu7c_BFu1ll_BFu7s)
//============================================================================


struct  BFu7c_BFu1ll_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu1ll_BFu8c) C1{ Fc:7 FL:1 Fc:8}



static void Test_BFu7c_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu8c, BFu7c_BFu1ll_BFu8c)
//============================================================================


struct  BFu7c_BFu1ll_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu1ll_BFu8i) C1{ Fc:7 FL:1 Fi:8}



static void Test_BFu7c_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu8i, BFu7c_BFu1ll_BFu8i)
//============================================================================


struct  BFu7c_BFu1ll_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu1ll_BFu8ll) C1{ Fc:7 FL:1 FL:8}



static void Test_BFu7c_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu8ll, BFu7c_BFu1ll_BFu8ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu1ll_BFu8s) C1{ Fc:7 FL:1 Fs:8}



static void Test_BFu7c_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu8s, BFu7c_BFu1ll_BFu8s)
//============================================================================


struct  BFu7c_BFu1ll_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu1ll_BFu9i) C1{ Fc:7 FL:1 Fi:9}



static void Test_BFu7c_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7c_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu9i, BFu7c_BFu1ll_BFu9i)
//============================================================================


struct  BFu7c_BFu1ll_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu1ll_BFu9ll) C1{ Fc:7 FL:1 FL:9}



static void Test_BFu7c_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7c_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu9ll, BFu7c_BFu1ll_BFu9ll)
//============================================================================


struct  BFu7c_BFu1ll_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu1ll_BFu9s) C1{ Fc:7 FL:1 Fs:9}



static void Test_BFu7c_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_BFu9s, BFu7c_BFu1ll_BFu9s)
//============================================================================


struct  BFu7c_BFu1ll_C  {
  unsigned char v1:7;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu7c_BFu1ll_C) C1{ Fc:7 FL:1 Fc}



static void Test_BFu7c_BFu1ll_C()
{
  {
    init_simple_test("BFu7c_BFu1ll_C");
    static STRUCT_IF_C BFu7c_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_C");
    check_field_offset(lv, v3, 1, "BFu7c_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_C, BFu7c_BFu1ll_C)
//============================================================================


struct  BFu7c_BFu1ll_D  {
  unsigned char v1:7;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu7c_BFu1ll_D) C1{ Fc:7 FL:1 FL}



static void Test_BFu7c_BFu1ll_D()
{
  {
    init_simple_test("BFu7c_BFu1ll_D");
    static STRUCT_IF_C BFu7c_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_D, BFu7c_BFu1ll_D)
//============================================================================


struct  BFu7c_BFu1ll_F  {
  unsigned char v1:7;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu7c_BFu1ll_F) C1{ Fc:7 FL:1 Fi}



static void Test_BFu7c_BFu1ll_F()
{
  {
    init_simple_test("BFu7c_BFu1ll_F");
    static STRUCT_IF_C BFu7c_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_F, BFu7c_BFu1ll_F)
//============================================================================


struct  BFu7c_BFu1ll_I  {
  unsigned char v1:7;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu7c_BFu1ll_I) C1{ Fc:7 FL:1 Fi}



static void Test_BFu7c_BFu1ll_I()
{
  {
    init_simple_test("BFu7c_BFu1ll_I");
    static STRUCT_IF_C BFu7c_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_I, BFu7c_BFu1ll_I)
//============================================================================


struct  BFu7c_BFu1ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu7c_BFu1ll_Ip) C1{ Fc:7 FL:1 Fp}



static void Test_BFu7c_BFu1ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu1ll_Ip");
    static STRUCT_IF_C BFu7c_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_Ip, BFu7c_BFu1ll_Ip)
//============================================================================


struct  BFu7c_BFu1ll_L  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu1ll_L) C1{ Fc:7 FL:1 FL}



static void Test_BFu7c_BFu1ll_L()
{
  {
    init_simple_test("BFu7c_BFu1ll_L");
    static STRUCT_IF_C BFu7c_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_L, BFu7c_BFu1ll_L)
//============================================================================


struct  BFu7c_BFu1ll_S  {
  unsigned char v1:7;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu7c_BFu1ll_S) C1{ Fc:7 FL:1 Fs}



static void Test_BFu7c_BFu1ll_S()
{
  {
    init_simple_test("BFu7c_BFu1ll_S");
    static STRUCT_IF_C BFu7c_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_S, BFu7c_BFu1ll_S)
//============================================================================


struct  BFu7c_BFu1ll_Uc  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu1ll_Uc) C1{ Fc:7 FL:1 Fc}



static void Test_BFu7c_BFu1ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu1ll_Uc");
    static STRUCT_IF_C BFu7c_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_Uc");
    check_field_offset(lv, v3, 1, "BFu7c_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_Uc, BFu7c_BFu1ll_Uc)
//============================================================================


struct  BFu7c_BFu1ll_Ui  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu1ll_Ui) C1{ Fc:7 FL:1 Fi}



static void Test_BFu7c_BFu1ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu1ll_Ui");
    static STRUCT_IF_C BFu7c_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_Ui, BFu7c_BFu1ll_Ui)
//============================================================================


struct  BFu7c_BFu1ll_Ul  {
  unsigned char v1:7;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu1ll_Ul) C1{ Fc:7 FL:1 FL}



static void Test_BFu7c_BFu1ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu1ll_Ul");
    static STRUCT_IF_C BFu7c_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_Ul, BFu7c_BFu1ll_Ul)
//============================================================================


struct  BFu7c_BFu1ll_Us  {
  unsigned char v1:7;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu1ll_Us) C1{ Fc:7 FL:1 Fs}



static void Test_BFu7c_BFu1ll_Us()
{
  {
    init_simple_test("BFu7c_BFu1ll_Us");
    static STRUCT_IF_C BFu7c_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_Us, BFu7c_BFu1ll_Us)
//============================================================================


struct  BFu7c_BFu1ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu7c_BFu1ll_Vp) C1{ Fc:7 FL:1 Fp}



static void Test_BFu7c_BFu1ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu1ll_Vp");
    static STRUCT_IF_C BFu7c_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1ll_Vp, BFu7c_BFu1ll_Vp)
//============================================================================


struct  BFu7c_BFu1s  {
  unsigned char v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu7c_BFu1s) C1{ Fc:7 Fs:1}



static void Test_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu1s");
    static STRUCT_IF_C BFu7c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s, BFu7c_BFu1s)
//============================================================================


struct  BFu7c_BFu1s_BFu15i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu1s_BFu15i) C1{ Fc:7 Fs:1 Fi:15}



static void Test_BFu7c_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu15i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7c_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu15i, BFu7c_BFu1s_BFu15i)
//============================================================================


struct  BFu7c_BFu1s_BFu15ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu1s_BFu15ll) C1{ Fc:7 Fs:1 FL:15}



static void Test_BFu7c_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7c_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu15ll, BFu7c_BFu1s_BFu15ll)
//============================================================================


struct  BFu7c_BFu1s_BFu15s  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu1s_BFu15s) C1{ Fc:7 Fs:1 Fs:15}



static void Test_BFu7c_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu15s");
    static STRUCT_IF_C BFu7c_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu15s, BFu7c_BFu1s_BFu15s)
//============================================================================


struct  BFu7c_BFu1s_BFu16i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu1s_BFu16i) C1{ Fc:7 Fs:1 Fi:16}



static void Test_BFu7c_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu16i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7c_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu16i, BFu7c_BFu1s_BFu16i)
//============================================================================


struct  BFu7c_BFu1s_BFu16ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu1s_BFu16ll) C1{ Fc:7 Fs:1 FL:16}



static void Test_BFu7c_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7c_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu16ll, BFu7c_BFu1s_BFu16ll)
//============================================================================


struct  BFu7c_BFu1s_BFu16s  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu1s_BFu16s) C1{ Fc:7 Fs:1 Fs:16}



static void Test_BFu7c_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu16s");
    static STRUCT_IF_C BFu7c_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu16s, BFu7c_BFu1s_BFu16s)
//============================================================================


struct  BFu7c_BFu1s_BFu17i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu1s_BFu17i) C1{ Fc:7 Fs:1 Fi:17}



static void Test_BFu7c_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu17i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7c_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu17i, BFu7c_BFu1s_BFu17i)
//============================================================================


struct  BFu7c_BFu1s_BFu17ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu1s_BFu17ll) C1{ Fc:7 Fs:1 FL:17}



static void Test_BFu7c_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7c_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu17ll, BFu7c_BFu1s_BFu17ll)
//============================================================================


struct  BFu7c_BFu1s_BFu1c  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu1s_BFu1c) C1{ Fc:7 Fs:1 Fc:1}



static void Test_BFu7c_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu1c");
    static STRUCT_IF_C BFu7c_BFu1s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu1c, BFu7c_BFu1s_BFu1c)
//============================================================================


struct  BFu7c_BFu1s_BFu1i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu1s_BFu1i) C1{ Fc:7 Fs:1 Fi:1}



static void Test_BFu7c_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu1i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu1i, BFu7c_BFu1s_BFu1i)
//============================================================================


struct  BFu7c_BFu1s_BFu1ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu1s_BFu1ll) C1{ Fc:7 Fs:1 FL:1}



static void Test_BFu7c_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu1ll, BFu7c_BFu1s_BFu1ll)
//============================================================================


struct  BFu7c_BFu1s_BFu1s  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu1s_BFu1s) C1{ Fc:7 Fs:1 Fs:1}



static void Test_BFu7c_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu1s");
    static STRUCT_IF_C BFu7c_BFu1s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7c_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu1s, BFu7c_BFu1s_BFu1s)
//============================================================================


struct  BFu7c_BFu1s_BFu31i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu1s_BFu31i) C1{ Fc:7 Fs:1 Fi:31}



static void Test_BFu7c_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu31i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu31i, BFu7c_BFu1s_BFu31i)
//============================================================================


struct  BFu7c_BFu1s_BFu31ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu1s_BFu31ll) C1{ Fc:7 Fs:1 FL:31}



static void Test_BFu7c_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7c_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu31ll, BFu7c_BFu1s_BFu31ll)
//============================================================================


struct  BFu7c_BFu1s_BFu32i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu1s_BFu32i) C1{ Fc:7 Fs:1 Fi:32}



static void Test_BFu7c_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu32i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu32i, BFu7c_BFu1s_BFu32i)
//============================================================================


struct  BFu7c_BFu1s_BFu32ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu1s_BFu32ll) C1{ Fc:7 Fs:1 FL:32}



static void Test_BFu7c_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7c_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu32ll, BFu7c_BFu1s_BFu32ll)
//============================================================================


struct  BFu7c_BFu1s_BFu33  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu1s_BFu33) C1{ Fc:7 Fs:1 FL:33}



static void Test_BFu7c_BFu1s_BFu33()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu33");
    static STRUCT_IF_C BFu7c_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7c_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu33, BFu7c_BFu1s_BFu33)
//============================================================================


struct  BFu7c_BFu1s_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu1s_BFu7c) C1{ Fc:7 Fs:1 Fc:7}



static void Test_BFu7c_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu1s_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu7c, BFu7c_BFu1s_BFu7c)
//============================================================================


struct  BFu7c_BFu1s_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu1s_BFu7i) C1{ Fc:7 Fs:1 Fi:7}



static void Test_BFu7c_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu7i, BFu7c_BFu1s_BFu7i)
//============================================================================


struct  BFu7c_BFu1s_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu1s_BFu7ll) C1{ Fc:7 Fs:1 FL:7}



static void Test_BFu7c_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu7ll, BFu7c_BFu1s_BFu7ll)
//============================================================================


struct  BFu7c_BFu1s_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu1s_BFu7s) C1{ Fc:7 Fs:1 Fs:7}



static void Test_BFu7c_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu1s_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7c_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu7s, BFu7c_BFu1s_BFu7s)
//============================================================================


struct  BFu7c_BFu1s_BFu8c  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu1s_BFu8c) C1{ Fc:7 Fs:1 Fc:8}



static void Test_BFu7c_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu8c");
    static STRUCT_IF_C BFu7c_BFu1s_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu8c, BFu7c_BFu1s_BFu8c)
//============================================================================


struct  BFu7c_BFu1s_BFu8i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu1s_BFu8i) C1{ Fc:7 Fs:1 Fi:8}



static void Test_BFu7c_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu8i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu8i, BFu7c_BFu1s_BFu8i)
//============================================================================


struct  BFu7c_BFu1s_BFu8ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu1s_BFu8ll) C1{ Fc:7 Fs:1 FL:8}



static void Test_BFu7c_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu8ll, BFu7c_BFu1s_BFu8ll)
//============================================================================


struct  BFu7c_BFu1s_BFu8s  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu1s_BFu8s) C1{ Fc:7 Fs:1 Fs:8}



static void Test_BFu7c_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu8s");
    static STRUCT_IF_C BFu7c_BFu1s_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7c_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu8s, BFu7c_BFu1s_BFu8s)
//============================================================================


struct  BFu7c_BFu1s_BFu9i  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu1s_BFu9i) C1{ Fc:7 Fs:1 Fi:9}



static void Test_BFu7c_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu9i");
    static STRUCT_IF_C BFu7c_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7c_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu9i, BFu7c_BFu1s_BFu9i)
//============================================================================


struct  BFu7c_BFu1s_BFu9ll  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu1s_BFu9ll) C1{ Fc:7 Fs:1 FL:9}



static void Test_BFu7c_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7c_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu9ll, BFu7c_BFu1s_BFu9ll)
//============================================================================


struct  BFu7c_BFu1s_BFu9s  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu1s_BFu9s) C1{ Fc:7 Fs:1 Fs:9}



static void Test_BFu7c_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu1s_BFu9s");
    static STRUCT_IF_C BFu7c_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_BFu9s, BFu7c_BFu1s_BFu9s)
//============================================================================


struct  BFu7c_BFu1s_C  {
  unsigned char v1:7;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu7c_BFu1s_C) C1{ Fc:7 Fs:1 Fc}



static void Test_BFu7c_BFu1s_C()
{
  {
    init_simple_test("BFu7c_BFu1s_C");
    static STRUCT_IF_C BFu7c_BFu1s_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_C");
    check_field_offset(lv, v3, 1, "BFu7c_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_C, BFu7c_BFu1s_C)
//============================================================================


struct  BFu7c_BFu1s_D  {
  unsigned char v1:7;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu7c_BFu1s_D) C1{ Fc:7 Fs:1 FL}



static void Test_BFu7c_BFu1s_D()
{
  {
    init_simple_test("BFu7c_BFu1s_D");
    static STRUCT_IF_C BFu7c_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_D, BFu7c_BFu1s_D)
//============================================================================


struct  BFu7c_BFu1s_F  {
  unsigned char v1:7;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu7c_BFu1s_F) C1{ Fc:7 Fs:1 Fi}



static void Test_BFu7c_BFu1s_F()
{
  {
    init_simple_test("BFu7c_BFu1s_F");
    static STRUCT_IF_C BFu7c_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_F, BFu7c_BFu1s_F)
//============================================================================


struct  BFu7c_BFu1s_I  {
  unsigned char v1:7;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu7c_BFu1s_I) C1{ Fc:7 Fs:1 Fi}



static void Test_BFu7c_BFu1s_I()
{
  {
    init_simple_test("BFu7c_BFu1s_I");
    static STRUCT_IF_C BFu7c_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_I, BFu7c_BFu1s_I)
//============================================================================


struct  BFu7c_BFu1s_Ip  {
  unsigned char v1:7;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu7c_BFu1s_Ip) C1{ Fc:7 Fs:1 Fp}



static void Test_BFu7c_BFu1s_Ip()
{
  {
    init_simple_test("BFu7c_BFu1s_Ip");
    static STRUCT_IF_C BFu7c_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_Ip, BFu7c_BFu1s_Ip)
//============================================================================


struct  BFu7c_BFu1s_L  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu1s_L) C1{ Fc:7 Fs:1 FL}



static void Test_BFu7c_BFu1s_L()
{
  {
    init_simple_test("BFu7c_BFu1s_L");
    static STRUCT_IF_C BFu7c_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_L, BFu7c_BFu1s_L)
//============================================================================


struct  BFu7c_BFu1s_S  {
  unsigned char v1:7;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu7c_BFu1s_S) C1{ Fc:7 Fs:1 Fs}



static void Test_BFu7c_BFu1s_S()
{
  {
    init_simple_test("BFu7c_BFu1s_S");
    static STRUCT_IF_C BFu7c_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_S, BFu7c_BFu1s_S)
//============================================================================


struct  BFu7c_BFu1s_Uc  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu1s_Uc) C1{ Fc:7 Fs:1 Fc}



static void Test_BFu7c_BFu1s_Uc()
{
  {
    init_simple_test("BFu7c_BFu1s_Uc");
    static STRUCT_IF_C BFu7c_BFu1s_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu1s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_Uc");
    check_field_offset(lv, v3, 1, "BFu7c_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_Uc, BFu7c_BFu1s_Uc)
//============================================================================


struct  BFu7c_BFu1s_Ui  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu1s_Ui) C1{ Fc:7 Fs:1 Fi}



static void Test_BFu7c_BFu1s_Ui()
{
  {
    init_simple_test("BFu7c_BFu1s_Ui");
    static STRUCT_IF_C BFu7c_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_Ui, BFu7c_BFu1s_Ui)
//============================================================================


struct  BFu7c_BFu1s_Ul  {
  unsigned char v1:7;
  unsigned short v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu1s_Ul) C1{ Fc:7 Fs:1 FL}



static void Test_BFu7c_BFu1s_Ul()
{
  {
    init_simple_test("BFu7c_BFu1s_Ul");
    static STRUCT_IF_C BFu7c_BFu1s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu1s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_Ul, BFu7c_BFu1s_Ul)
//============================================================================


struct  BFu7c_BFu1s_Us  {
  unsigned char v1:7;
  unsigned short v2:1;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu1s_Us) C1{ Fc:7 Fs:1 Fs}



static void Test_BFu7c_BFu1s_Us()
{
  {
    init_simple_test("BFu7c_BFu1s_Us");
    static STRUCT_IF_C BFu7c_BFu1s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu1s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu1s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu1s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_Us, BFu7c_BFu1s_Us)
//============================================================================


struct  BFu7c_BFu1s_Vp  {
  unsigned char v1:7;
  unsigned short v2:1;
  void *v3;
};
//SIG(1 BFu7c_BFu1s_Vp) C1{ Fc:7 Fs:1 Fp}



static void Test_BFu7c_BFu1s_Vp()
{
  {
    init_simple_test("BFu7c_BFu1s_Vp");
    static STRUCT_IF_C BFu7c_BFu1s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu1s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu1s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu1s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu1s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7c_BFu1s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu1s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu1s_Vp, BFu7c_BFu1s_Vp)
//============================================================================


struct  BFu7c_BFu31i  {
  unsigned char v1:7;
  unsigned int v2:31;
};
//SIG(1 BFu7c_BFu31i) C1{ Fc:7 Fi:31}



static void Test_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu31i");
    static STRUCT_IF_C BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i, BFu7c_BFu31i)
//============================================================================


struct  BFu7c_BFu31i_BFu15i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu31i_BFu15i) C1{ Fc:7 Fi:31 Fi:15}



static void Test_BFu7c_BFu31i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_BFu31i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu31i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu15i, BFu7c_BFu31i_BFu15i)
//============================================================================


struct  BFu7c_BFu31i_BFu15ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu31i_BFu15ll) C1{ Fc:7 Fi:31 FL:15}



static void Test_BFu7c_BFu31i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, 1, "BFu7c_BFu31i_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 15, hide_ull(1LL<<14), "BFu7c_BFu31i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu15ll, BFu7c_BFu31i_BFu15ll)
//============================================================================


struct  BFu7c_BFu31i_BFu15s  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu31i_BFu15s) C1{ Fc:7 Fi:31 Fs:15}



static void Test_BFu7c_BFu31i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu31i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_BFu31i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu31i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu15s, BFu7c_BFu31i_BFu15s)
//============================================================================


struct  BFu7c_BFu31i_BFu16i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu31i_BFu16i) C1{ Fc:7 Fi:31 Fi:16}



static void Test_BFu7c_BFu31i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_BFu31i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu31i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu16i, BFu7c_BFu31i_BFu16i)
//============================================================================


struct  BFu7c_BFu31i_BFu16ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu31i_BFu16ll) C1{ Fc:7 Fi:31 FL:16}



static void Test_BFu7c_BFu31i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, 1, "BFu7c_BFu31i_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 16, hide_ull(1LL<<15), "BFu7c_BFu31i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu16ll, BFu7c_BFu31i_BFu16ll)
//============================================================================


struct  BFu7c_BFu31i_BFu16s  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu31i_BFu16s) C1{ Fc:7 Fi:31 Fs:16}



static void Test_BFu7c_BFu31i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu31i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_BFu31i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu31i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu16s, BFu7c_BFu31i_BFu16s)
//============================================================================


struct  BFu7c_BFu31i_BFu17i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu31i_BFu17i) C1{ Fc:7 Fi:31 Fi:17}



static void Test_BFu7c_BFu31i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_BFu31i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu31i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu17i, BFu7c_BFu31i_BFu17i)
//============================================================================


struct  BFu7c_BFu31i_BFu17ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu31i_BFu17ll) C1{ Fc:7 Fi:31 FL:17}



static void Test_BFu7c_BFu31i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, 1, "BFu7c_BFu31i_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 17, hide_ull(1LL<<16), "BFu7c_BFu31i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu17ll, BFu7c_BFu31i_BFu17ll)
//============================================================================


struct  BFu7c_BFu31i_BFu1c  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu31i_BFu1c) C1{ Fc:7 Fi:31 Fc:1}



static void Test_BFu7c_BFu31i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu31i_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu1c");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7c_BFu31i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu1c, BFu7c_BFu31i_BFu1c)
//============================================================================


struct  BFu7c_BFu31i_BFu1i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu31i_BFu1i) C1{ Fc:7 Fi:31 Fi:1}



static void Test_BFu7c_BFu31i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu1i");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7c_BFu31i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu1i, BFu7c_BFu31i_BFu1i)
//============================================================================


struct  BFu7c_BFu31i_BFu1ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu31i_BFu1ll) C1{ Fc:7 Fi:31 FL:1}



static void Test_BFu7c_BFu31i_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu1ll");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7c_BFu31i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu1ll, BFu7c_BFu31i_BFu1ll)
//============================================================================


struct  BFu7c_BFu31i_BFu1s  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu31i_BFu1s) C1{ Fc:7 Fi:31 Fs:1}



static void Test_BFu7c_BFu31i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu31i_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu1s");
    set_bf_and_test(lv, v3, 7, 7, 1, 1, "BFu7c_BFu31i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu1s, BFu7c_BFu31i_BFu1s)
//============================================================================


struct  BFu7c_BFu31i_BFu31i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu31i_BFu31i) C1{ Fc:7 Fi:31 Fi:31}



static void Test_BFu7c_BFu31i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_BFu31i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu31i, BFu7c_BFu31i_BFu31i)
//============================================================================


struct  BFu7c_BFu31i_BFu31ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu31i_BFu31ll) C1{ Fc:7 Fi:31 FL:31}



static void Test_BFu7c_BFu31i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, 1, "BFu7c_BFu31i_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu31ll, BFu7c_BFu31i_BFu31ll)
//============================================================================


struct  BFu7c_BFu31i_BFu32i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu31i_BFu32i) C1{ Fc:7 Fi:31 Fi:32}



static void Test_BFu7c_BFu31i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_BFu31i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu31i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu32i, BFu7c_BFu31i_BFu32i)
//============================================================================


struct  BFu7c_BFu31i_BFu32ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu31i_BFu32ll) C1{ Fc:7 Fi:31 FL:32}



static void Test_BFu7c_BFu31i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, 1, "BFu7c_BFu31i_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu7c_BFu31i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu32ll, BFu7c_BFu31i_BFu32ll)
//============================================================================


struct  BFu7c_BFu31i_BFu33  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu31i_BFu33) C1{ Fc:7 Fi:31 FL:33}



static void Test_BFu7c_BFu31i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu33");
    static STRUCT_IF_C BFu7c_BFu31i_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, 1, "BFu7c_BFu31i_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu7c_BFu31i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu33, BFu7c_BFu31i_BFu33)
//============================================================================


struct  BFu7c_BFu31i_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu31i_BFu7c) C1{ Fc:7 Fi:31 Fc:7}



static void Test_BFu7c_BFu31i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu31i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_BFu31i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu7c, BFu7c_BFu31i_BFu7c)
//============================================================================


struct  BFu7c_BFu31i_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu31i_BFu7i) C1{ Fc:7 Fi:31 Fi:7}



static void Test_BFu7c_BFu31i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_BFu31i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu7i, BFu7c_BFu31i_BFu7i)
//============================================================================


struct  BFu7c_BFu31i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu31i_BFu7ll) C1{ Fc:7 Fi:31 FL:7}



static void Test_BFu7c_BFu31i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, 1, "BFu7c_BFu31i_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu7ll, BFu7c_BFu31i_BFu7ll)
//============================================================================


struct  BFu7c_BFu31i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu31i_BFu7s) C1{ Fc:7 Fi:31 Fs:7}



static void Test_BFu7c_BFu31i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu31i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_BFu31i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu7s, BFu7c_BFu31i_BFu7s)
//============================================================================


struct  BFu7c_BFu31i_BFu8c  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu31i_BFu8c) C1{ Fc:7 Fi:31 Fc:8}



static void Test_BFu7c_BFu31i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu31i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_BFu31i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu31i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu8c, BFu7c_BFu31i_BFu8c)
//============================================================================


struct  BFu7c_BFu31i_BFu8i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu31i_BFu8i) C1{ Fc:7 Fi:31 Fi:8}



static void Test_BFu7c_BFu31i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_BFu31i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu31i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu8i, BFu7c_BFu31i_BFu8i)
//============================================================================


struct  BFu7c_BFu31i_BFu8ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu31i_BFu8ll) C1{ Fc:7 Fi:31 FL:8}



static void Test_BFu7c_BFu31i_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, 1, "BFu7c_BFu31i_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 8, hide_ull(1LL<<7), "BFu7c_BFu31i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu8ll, BFu7c_BFu31i_BFu8ll)
//============================================================================


struct  BFu7c_BFu31i_BFu8s  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu31i_BFu8s) C1{ Fc:7 Fi:31 Fs:8}



static void Test_BFu7c_BFu31i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu31i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_BFu31i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu31i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu8s, BFu7c_BFu31i_BFu8s)
//============================================================================


struct  BFu7c_BFu31i_BFu9i  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu31i_BFu9i) C1{ Fc:7 Fi:31 Fi:9}



static void Test_BFu7c_BFu31i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu31i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_BFu31i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu31i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu9i, BFu7c_BFu31i_BFu9i)
//============================================================================


struct  BFu7c_BFu31i_BFu9ll  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu31i_BFu9ll) C1{ Fc:7 Fi:31 FL:9}



static void Test_BFu7c_BFu31i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu31i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, 1, "BFu7c_BFu31i_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(8,7), ABISELECT(0,7), 9, hide_ull(1LL<<8), "BFu7c_BFu31i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu9ll, BFu7c_BFu31i_BFu9ll)
//============================================================================


struct  BFu7c_BFu31i_BFu9s  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu31i_BFu9s) C1{ Fc:7 Fi:31 Fs:9}



static void Test_BFu7c_BFu31i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu31i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu31i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_BFu31i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu31i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_BFu9s, BFu7c_BFu31i_BFu9s)
//============================================================================


struct  BFu7c_BFu31i_C  {
  unsigned char v1:7;
  unsigned int v2:31;
  char v3;
};
//SIG(1 BFu7c_BFu31i_C) C1{ Fc:7 Fi:31 Fc}



static void Test_BFu7c_BFu31i_C()
{
  {
    init_simple_test("BFu7c_BFu31i_C");
    static STRUCT_IF_C BFu7c_BFu31i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_C");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_C");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_C, BFu7c_BFu31i_C)
//============================================================================


struct  BFu7c_BFu31i_D  {
  unsigned char v1:7;
  unsigned int v2:31;
  double v3;
};
//SIG(1 BFu7c_BFu31i_D) C1{ Fc:7 Fi:31 FL}



static void Test_BFu7c_BFu31i_D()
{
  {
    init_simple_test("BFu7c_BFu31i_D");
    static STRUCT_IF_C BFu7c_BFu31i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu31i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_D");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_D");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_D, BFu7c_BFu31i_D)
//============================================================================


struct  BFu7c_BFu31i_F  {
  unsigned char v1:7;
  unsigned int v2:31;
  float v3;
};
//SIG(1 BFu7c_BFu31i_F) C1{ Fc:7 Fi:31 Fi}



static void Test_BFu7c_BFu31i_F()
{
  {
    init_simple_test("BFu7c_BFu31i_F");
    static STRUCT_IF_C BFu7c_BFu31i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_F");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_F");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_F, BFu7c_BFu31i_F)
//============================================================================


struct  BFu7c_BFu31i_I  {
  unsigned char v1:7;
  unsigned int v2:31;
  int v3;
};
//SIG(1 BFu7c_BFu31i_I) C1{ Fc:7 Fi:31 Fi}



static void Test_BFu7c_BFu31i_I()
{
  {
    init_simple_test("BFu7c_BFu31i_I");
    static STRUCT_IF_C BFu7c_BFu31i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_I");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_I");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_I, BFu7c_BFu31i_I)
//============================================================================


struct  BFu7c_BFu31i_Ip  {
  unsigned char v1:7;
  unsigned int v2:31;
  int *v3;
};
//SIG(1 BFu7c_BFu31i_Ip) C1{ Fc:7 Fi:31 Fp}



static void Test_BFu7c_BFu31i_Ip()
{
  {
    init_simple_test("BFu7c_BFu31i_Ip");
    static STRUCT_IF_C BFu7c_BFu31i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_Ip");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_Ip, BFu7c_BFu31i_Ip)
//============================================================================


struct  BFu7c_BFu31i_L  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu31i_L) C1{ Fc:7 Fi:31 FL}



static void Test_BFu7c_BFu31i_L()
{
  {
    init_simple_test("BFu7c_BFu31i_L");
    static STRUCT_IF_C BFu7c_BFu31i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu31i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_L");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_L");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_L, BFu7c_BFu31i_L)
//============================================================================


struct  BFu7c_BFu31i_S  {
  unsigned char v1:7;
  unsigned int v2:31;
  short v3;
};
//SIG(1 BFu7c_BFu31i_S) C1{ Fc:7 Fi:31 Fs}



static void Test_BFu7c_BFu31i_S()
{
  {
    init_simple_test("BFu7c_BFu31i_S");
    static STRUCT_IF_C BFu7c_BFu31i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_S");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_S");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_S, BFu7c_BFu31i_S)
//============================================================================


struct  BFu7c_BFu31i_Uc  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu31i_Uc) C1{ Fc:7 Fi:31 Fc}



static void Test_BFu7c_BFu31i_Uc()
{
  {
    init_simple_test("BFu7c_BFu31i_Uc");
    static STRUCT_IF_C BFu7c_BFu31i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_Uc");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_Uc, BFu7c_BFu31i_Uc)
//============================================================================


struct  BFu7c_BFu31i_Ui  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu31i_Ui) C1{ Fc:7 Fi:31 Fi}



static void Test_BFu7c_BFu31i_Ui()
{
  {
    init_simple_test("BFu7c_BFu31i_Ui");
    static STRUCT_IF_C BFu7c_BFu31i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_Ui");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_Ui, BFu7c_BFu31i_Ui)
//============================================================================


struct  BFu7c_BFu31i_Ul  {
  unsigned char v1:7;
  unsigned int v2:31;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu31i_Ul) C1{ Fc:7 Fi:31 FL}



static void Test_BFu7c_BFu31i_Ul()
{
  {
    init_simple_test("BFu7c_BFu31i_Ul");
    static STRUCT_IF_C BFu7c_BFu31i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu31i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_Ul");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_Ul, BFu7c_BFu31i_Ul)
//============================================================================


struct  BFu7c_BFu31i_Us  {
  unsigned char v1:7;
  unsigned int v2:31;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu31i_Us) C1{ Fc:7 Fi:31 Fs}



static void Test_BFu7c_BFu31i_Us()
{
  {
    init_simple_test("BFu7c_BFu31i_Us");
    static STRUCT_IF_C BFu7c_BFu31i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu31i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu31i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_Us");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_Us");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_Us, BFu7c_BFu31i_Us)
//============================================================================


struct  BFu7c_BFu31i_Vp  {
  unsigned char v1:7;
  unsigned int v2:31;
  void *v3;
};
//SIG(1 BFu7c_BFu31i_Vp) C1{ Fc:7 Fi:31 Fp}



static void Test_BFu7c_BFu31i_Vp()
{
  {
    init_simple_test("BFu7c_BFu31i_Vp");
    static STRUCT_IF_C BFu7c_BFu31i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, 1, "BFu7c_BFu31i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31i_Vp");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31i_Vp, BFu7c_BFu31i_Vp)
//============================================================================


struct  BFu7c_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
};
//SIG(1 BFu7c_BFu31ll) C1{ Fc:7 FL:31}



static void Test_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll, BFu7c_BFu31ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu15i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu31ll_BFu15i) C1{ Fc:7 FL:31 Fi:15}



static void Test_BFu7c_BFu31ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu7c_BFu31ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu7c_BFu31ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu15i, BFu7c_BFu31ll_BFu15i)
//============================================================================


struct  BFu7c_BFu31ll_BFu15ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu31ll_BFu15ll) C1{ Fc:7 FL:31 FL:15}



static void Test_BFu7c_BFu31ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, 1, "BFu7c_BFu31ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 6, 15, hide_ull(1LL<<14), "BFu7c_BFu31ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu15ll, BFu7c_BFu31ll_BFu15ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu15s  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu31ll_BFu15s) C1{ Fc:7 FL:31 Fs:15}



static void Test_BFu7c_BFu31ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7c_BFu31ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu31ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu15s, BFu7c_BFu31ll_BFu15s)
//============================================================================


struct  BFu7c_BFu31ll_BFu16i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu31ll_BFu16i) C1{ Fc:7 FL:31 Fi:16}



static void Test_BFu7c_BFu31ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu7c_BFu31ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu31ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu16i, BFu7c_BFu31ll_BFu16i)
//============================================================================


struct  BFu7c_BFu31ll_BFu16ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu31ll_BFu16ll) C1{ Fc:7 FL:31 FL:16}



static void Test_BFu7c_BFu31ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, 1, "BFu7c_BFu31ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu31ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu16ll, BFu7c_BFu31ll_BFu16ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu16s  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu31ll_BFu16s) C1{ Fc:7 FL:31 Fs:16}



static void Test_BFu7c_BFu31ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7c_BFu31ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu31ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu16s, BFu7c_BFu31ll_BFu16s)
//============================================================================


struct  BFu7c_BFu31ll_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu31ll_BFu17i) C1{ Fc:7 FL:31 Fi:17}



static void Test_BFu7c_BFu31ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu7c_BFu31ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu31ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu17i, BFu7c_BFu31ll_BFu17i)
//============================================================================


struct  BFu7c_BFu31ll_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu31ll_BFu17ll) C1{ Fc:7 FL:31 FL:17}



static void Test_BFu7c_BFu31ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, 1, "BFu7c_BFu31ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu31ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu17ll, BFu7c_BFu31ll_BFu17ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu1c  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu31ll_BFu1c) C1{ Fc:7 FL:31 Fc:1}



static void Test_BFu7c_BFu31ll_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu1c");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7c_BFu31ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu1c, BFu7c_BFu31ll_BFu1c)
//============================================================================


struct  BFu7c_BFu31ll_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu31ll_BFu1i) C1{ Fc:7 FL:31 Fi:1}



static void Test_BFu7c_BFu31ll_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu1i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7c_BFu31ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu1i, BFu7c_BFu31ll_BFu1i)
//============================================================================


struct  BFu7c_BFu31ll_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu31ll_BFu1ll) C1{ Fc:7 FL:31 FL:1}



static void Test_BFu7c_BFu31ll_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7c_BFu31ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu1ll, BFu7c_BFu31ll_BFu1ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu31ll_BFu1s) C1{ Fc:7 FL:31 Fs:1}



static void Test_BFu7c_BFu31ll_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu1s");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 6, 1, 1, "BFu7c_BFu31ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu1s, BFu7c_BFu31ll_BFu1s)
//============================================================================


struct  BFu7c_BFu31ll_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu31ll_BFu31i) C1{ Fc:7 FL:31 Fi:31}



static void Test_BFu7c_BFu31ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_BFu31ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu31i, BFu7c_BFu31ll_BFu31i)
//============================================================================


struct  BFu7c_BFu31ll_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu31ll_BFu31ll) C1{ Fc:7 FL:31 FL:31}



static void Test_BFu7c_BFu31ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, 1, "BFu7c_BFu31ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu31ll, BFu7c_BFu31ll_BFu31ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu31ll_BFu32i) C1{ Fc:7 FL:31 Fi:32}



static void Test_BFu7c_BFu31ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_BFu31ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu31ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu32i, BFu7c_BFu31ll_BFu32i)
//============================================================================


struct  BFu7c_BFu31ll_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu31ll_BFu32ll) C1{ Fc:7 FL:31 FL:32}



static void Test_BFu7c_BFu31ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, 1, "BFu7c_BFu31ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 32, hide_ull(1LL<<31), "BFu7c_BFu31ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu32ll, BFu7c_BFu31ll_BFu32ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu33  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu31ll_BFu33) C1{ Fc:7 FL:31 FL:33}



static void Test_BFu7c_BFu31ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, 1, "BFu7c_BFu31ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,6), 33, hide_ull(1LL<<32), "BFu7c_BFu31ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu33, BFu7c_BFu31ll_BFu33)
//============================================================================


struct  BFu7c_BFu31ll_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu31ll_BFu7c) C1{ Fc:7 FL:31 Fc:7}



static void Test_BFu7c_BFu31ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7c_BFu31ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu7c, BFu7c_BFu31ll_BFu7c)
//============================================================================


struct  BFu7c_BFu31ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu31ll_BFu7i) C1{ Fc:7 FL:31 Fi:7}



static void Test_BFu7c_BFu31ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7c_BFu31ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu7i, BFu7c_BFu31ll_BFu7i)
//============================================================================


struct  BFu7c_BFu31ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu31ll_BFu7ll) C1{ Fc:7 FL:31 FL:7}



static void Test_BFu7c_BFu31ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7c_BFu31ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu7ll, BFu7c_BFu31ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu31ll_BFu7s) C1{ Fc:7 FL:31 Fs:7}



static void Test_BFu7c_BFu31ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, 1, "BFu7c_BFu31ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu7s, BFu7c_BFu31ll_BFu7s)
//============================================================================


struct  BFu7c_BFu31ll_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu31ll_BFu8c) C1{ Fc:7 FL:31 Fc:8}



static void Test_BFu7c_BFu31ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7c_BFu31ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu31ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu8c, BFu7c_BFu31ll_BFu8c)
//============================================================================


struct  BFu7c_BFu31ll_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu31ll_BFu8i) C1{ Fc:7 FL:31 Fi:8}



static void Test_BFu7c_BFu31ll_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu8i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7c_BFu31ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu31ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu8i, BFu7c_BFu31ll_BFu8i)
//============================================================================


struct  BFu7c_BFu31ll_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu31ll_BFu8ll) C1{ Fc:7 FL:31 FL:8}



static void Test_BFu7c_BFu31ll_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7c_BFu31ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu31ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu8ll, BFu7c_BFu31ll_BFu8ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu31ll_BFu8s) C1{ Fc:7 FL:31 Fs:8}



static void Test_BFu7c_BFu31ll_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu8s");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, 1, "BFu7c_BFu31ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu31ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu8s, BFu7c_BFu31ll_BFu8s)
//============================================================================


struct  BFu7c_BFu31ll_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu31ll_BFu9i) C1{ Fc:7 FL:31 Fi:9}



static void Test_BFu7c_BFu31ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7c_BFu31ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu31ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu9i, BFu7c_BFu31ll_BFu9i)
//============================================================================


struct  BFu7c_BFu31ll_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu31ll_BFu9ll) C1{ Fc:7 FL:31 FL:9}



static void Test_BFu7c_BFu31ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7c_BFu31ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu31ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu9ll, BFu7c_BFu31ll_BFu9ll)
//============================================================================


struct  BFu7c_BFu31ll_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu31ll_BFu9s) C1{ Fc:7 FL:31 Fs:9}



static void Test_BFu7c_BFu31ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu31ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu31ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, 1, "BFu7c_BFu31ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu31ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_BFu9s, BFu7c_BFu31ll_BFu9s)
//============================================================================


struct  BFu7c_BFu31ll_C  {
  unsigned char v1:7;
  __tsu64 v2:31;
  char v3;
};
//SIG(1 BFu7c_BFu31ll_C) C1{ Fc:7 FL:31 Fc}



static void Test_BFu7c_BFu31ll_C()
{
  {
    init_simple_test("BFu7c_BFu31ll_C");
    static STRUCT_IF_C BFu7c_BFu31ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_C");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_C");
    check_field_offset(lv, v3, 5, "BFu7c_BFu31ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_C, BFu7c_BFu31ll_C)
//============================================================================


struct  BFu7c_BFu31ll_D  {
  unsigned char v1:7;
  __tsu64 v2:31;
  double v3;
};
//SIG(1 BFu7c_BFu31ll_D) C1{ Fc:7 FL:31 FL}



static void Test_BFu7c_BFu31ll_D()
{
  {
    init_simple_test("BFu7c_BFu31ll_D");
    static STRUCT_IF_C BFu7c_BFu31ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu31ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_D");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_D");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_D, BFu7c_BFu31ll_D)
//============================================================================


struct  BFu7c_BFu31ll_F  {
  unsigned char v1:7;
  __tsu64 v2:31;
  float v3;
};
//SIG(1 BFu7c_BFu31ll_F) C1{ Fc:7 FL:31 Fi}



static void Test_BFu7c_BFu31ll_F()
{
  {
    init_simple_test("BFu7c_BFu31ll_F");
    static STRUCT_IF_C BFu7c_BFu31ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_F");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_F");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_F, BFu7c_BFu31ll_F)
//============================================================================


struct  BFu7c_BFu31ll_I  {
  unsigned char v1:7;
  __tsu64 v2:31;
  int v3;
};
//SIG(1 BFu7c_BFu31ll_I) C1{ Fc:7 FL:31 Fi}



static void Test_BFu7c_BFu31ll_I()
{
  {
    init_simple_test("BFu7c_BFu31ll_I");
    static STRUCT_IF_C BFu7c_BFu31ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_I");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_I");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_I, BFu7c_BFu31ll_I)
//============================================================================


struct  BFu7c_BFu31ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:31;
  int *v3;
};
//SIG(1 BFu7c_BFu31ll_Ip) C1{ Fc:7 FL:31 Fp}



static void Test_BFu7c_BFu31ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu31ll_Ip");
    static STRUCT_IF_C BFu7c_BFu31ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_Ip");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_Ip, BFu7c_BFu31ll_Ip)
//============================================================================


struct  BFu7c_BFu31ll_L  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu31ll_L) C1{ Fc:7 FL:31 FL}



static void Test_BFu7c_BFu31ll_L()
{
  {
    init_simple_test("BFu7c_BFu31ll_L");
    static STRUCT_IF_C BFu7c_BFu31ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu31ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_L");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_L");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_L, BFu7c_BFu31ll_L)
//============================================================================


struct  BFu7c_BFu31ll_S  {
  unsigned char v1:7;
  __tsu64 v2:31;
  short v3;
};
//SIG(1 BFu7c_BFu31ll_S) C1{ Fc:7 FL:31 Fs}



static void Test_BFu7c_BFu31ll_S()
{
  {
    init_simple_test("BFu7c_BFu31ll_S");
    static STRUCT_IF_C BFu7c_BFu31ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_S");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_S");
    check_field_offset(lv, v3, 6, "BFu7c_BFu31ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_S, BFu7c_BFu31ll_S)
//============================================================================


struct  BFu7c_BFu31ll_Uc  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu31ll_Uc) C1{ Fc:7 FL:31 Fc}



static void Test_BFu7c_BFu31ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu31ll_Uc");
    static STRUCT_IF_C BFu7c_BFu31ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_Uc");
    check_field_offset(lv, v3, 5, "BFu7c_BFu31ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_Uc, BFu7c_BFu31ll_Uc)
//============================================================================


struct  BFu7c_BFu31ll_Ui  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu31ll_Ui) C1{ Fc:7 FL:31 Fi}



static void Test_BFu7c_BFu31ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu31ll_Ui");
    static STRUCT_IF_C BFu7c_BFu31ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_Ui");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_Ui, BFu7c_BFu31ll_Ui)
//============================================================================


struct  BFu7c_BFu31ll_Ul  {
  unsigned char v1:7;
  __tsu64 v2:31;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu31ll_Ul) C1{ Fc:7 FL:31 FL}



static void Test_BFu7c_BFu31ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu31ll_Ul");
    static STRUCT_IF_C BFu7c_BFu31ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu31ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_Ul");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_Ul, BFu7c_BFu31ll_Ul)
//============================================================================


struct  BFu7c_BFu31ll_Us  {
  unsigned char v1:7;
  __tsu64 v2:31;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu31ll_Us) C1{ Fc:7 FL:31 Fs}



static void Test_BFu7c_BFu31ll_Us()
{
  {
    init_simple_test("BFu7c_BFu31ll_Us");
    static STRUCT_IF_C BFu7c_BFu31ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu31ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_Us");
    check_field_offset(lv, v3, 6, "BFu7c_BFu31ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_Us, BFu7c_BFu31ll_Us)
//============================================================================


struct  BFu7c_BFu31ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:31;
  void *v3;
};
//SIG(1 BFu7c_BFu31ll_Vp) C1{ Fc:7 FL:31 Fp}



static void Test_BFu7c_BFu31ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu31ll_Vp");
    static STRUCT_IF_C BFu7c_BFu31ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu31ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu31ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu31ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 31, 1, "BFu7c_BFu31ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu31ll_Vp");
    check_field_offset(lv, v3, 8, "BFu7c_BFu31ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu31ll_Vp, BFu7c_BFu31ll_Vp)
//============================================================================


struct  BFu7c_BFu32i  {
  unsigned char v1:7;
  unsigned int v2:32;
};
//SIG(1 BFu7c_BFu32i) C1{ Fc:7 Fi:32}



static void Test_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu32i");
    static STRUCT_IF_C BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i, BFu7c_BFu32i)
//============================================================================


struct  BFu7c_BFu32i_BFu15i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu32i_BFu15i) C1{ Fc:7 Fi:32 Fi:15}



static void Test_BFu7c_BFu32i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu15i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_BFu32i_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu32i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu15i, BFu7c_BFu32i_BFu15i)
//============================================================================


struct  BFu7c_BFu32i_BFu15ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu32i_BFu15ll) C1{ Fc:7 Fi:32 FL:15}



static void Test_BFu7c_BFu32i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu15ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_BFu32i_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu32i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu15ll, BFu7c_BFu32i_BFu15ll)
//============================================================================


struct  BFu7c_BFu32i_BFu15s  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu32i_BFu15s) C1{ Fc:7 Fi:32 Fs:15}



static void Test_BFu7c_BFu32i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu32i_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu15s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_BFu32i_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu32i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu15s, BFu7c_BFu32i_BFu15s)
//============================================================================


struct  BFu7c_BFu32i_BFu16i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu32i_BFu16i) C1{ Fc:7 Fi:32 Fi:16}



static void Test_BFu7c_BFu32i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu16i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_BFu32i_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu32i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu16i, BFu7c_BFu32i_BFu16i)
//============================================================================


struct  BFu7c_BFu32i_BFu16ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu32i_BFu16ll) C1{ Fc:7 Fi:32 FL:16}



static void Test_BFu7c_BFu32i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu16ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_BFu32i_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu32i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu16ll, BFu7c_BFu32i_BFu16ll)
//============================================================================


struct  BFu7c_BFu32i_BFu16s  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu32i_BFu16s) C1{ Fc:7 Fi:32 Fs:16}



static void Test_BFu7c_BFu32i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu32i_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu16s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_BFu32i_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu32i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu16s, BFu7c_BFu32i_BFu16s)
//============================================================================


struct  BFu7c_BFu32i_BFu17i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu32i_BFu17i) C1{ Fc:7 Fi:32 Fi:17}



static void Test_BFu7c_BFu32i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu17i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_BFu32i_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu32i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu17i, BFu7c_BFu32i_BFu17i)
//============================================================================


struct  BFu7c_BFu32i_BFu17ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu32i_BFu17ll) C1{ Fc:7 Fi:32 FL:17}



static void Test_BFu7c_BFu32i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu17ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_BFu32i_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu32i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu17ll, BFu7c_BFu32i_BFu17ll)
//============================================================================


struct  BFu7c_BFu32i_BFu1c  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu32i_BFu1c) C1{ Fc:7 Fi:32 Fc:1}



static void Test_BFu7c_BFu32i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu32i_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu1c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu1c");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_BFu32i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu1c, BFu7c_BFu32i_BFu1c)
//============================================================================


struct  BFu7c_BFu32i_BFu1i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu32i_BFu1i) C1{ Fc:7 Fi:32 Fi:1}



static void Test_BFu7c_BFu32i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu1i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu1i");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_BFu32i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu1i, BFu7c_BFu32i_BFu1i)
//============================================================================


struct  BFu7c_BFu32i_BFu1ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu32i_BFu1ll) C1{ Fc:7 Fi:32 FL:1}



static void Test_BFu7c_BFu32i_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu1ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu1ll");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_BFu32i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu1ll, BFu7c_BFu32i_BFu1ll)
//============================================================================


struct  BFu7c_BFu32i_BFu1s  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu32i_BFu1s) C1{ Fc:7 Fi:32 Fs:1}



static void Test_BFu7c_BFu32i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu32i_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu1s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu1s");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_BFu32i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu1s, BFu7c_BFu32i_BFu1s)
//============================================================================


struct  BFu7c_BFu32i_BFu31i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu32i_BFu31i) C1{ Fc:7 Fi:32 Fi:31}



static void Test_BFu7c_BFu32i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu31i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_BFu32i_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu32i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu31i, BFu7c_BFu32i_BFu31i)
//============================================================================


struct  BFu7c_BFu32i_BFu31ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu32i_BFu31ll) C1{ Fc:7 Fi:32 FL:31}



static void Test_BFu7c_BFu32i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu31ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_BFu32i_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu32i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu31ll, BFu7c_BFu32i_BFu31ll)
//============================================================================


struct  BFu7c_BFu32i_BFu32i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu32i_BFu32i) C1{ Fc:7 Fi:32 Fi:32}



static void Test_BFu7c_BFu32i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu32i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_BFu32i_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu32i, BFu7c_BFu32i_BFu32i)
//============================================================================


struct  BFu7c_BFu32i_BFu32ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu32i_BFu32ll) C1{ Fc:7 Fi:32 FL:32}



static void Test_BFu7c_BFu32i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu32ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_BFu32i_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu32ll, BFu7c_BFu32i_BFu32ll)
//============================================================================


struct  BFu7c_BFu32i_BFu33  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu32i_BFu33) C1{ Fc:7 Fi:32 FL:33}



static void Test_BFu7c_BFu32i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu33");
    static STRUCT_IF_C BFu7c_BFu32i_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu32i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu33");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7c_BFu32i_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu32i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu33, BFu7c_BFu32i_BFu33)
//============================================================================


struct  BFu7c_BFu32i_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu32i_BFu7c) C1{ Fc:7 Fi:32 Fc:7}



static void Test_BFu7c_BFu32i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu32i_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu7c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_BFu32i_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu7c, BFu7c_BFu32i_BFu7c)
//============================================================================


struct  BFu7c_BFu32i_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu32i_BFu7i) C1{ Fc:7 Fi:32 Fi:7}



static void Test_BFu7c_BFu32i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu7i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_BFu32i_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu7i, BFu7c_BFu32i_BFu7i)
//============================================================================


struct  BFu7c_BFu32i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu32i_BFu7ll) C1{ Fc:7 Fi:32 FL:7}



static void Test_BFu7c_BFu32i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu7ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_BFu32i_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu7ll, BFu7c_BFu32i_BFu7ll)
//============================================================================


struct  BFu7c_BFu32i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu32i_BFu7s) C1{ Fc:7 Fi:32 Fs:7}



static void Test_BFu7c_BFu32i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu32i_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu7s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_BFu32i_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu7s, BFu7c_BFu32i_BFu7s)
//============================================================================


struct  BFu7c_BFu32i_BFu8c  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu32i_BFu8c) C1{ Fc:7 Fi:32 Fc:8}



static void Test_BFu7c_BFu32i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu32i_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu8c");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_BFu32i_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu32i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu8c, BFu7c_BFu32i_BFu8c)
//============================================================================


struct  BFu7c_BFu32i_BFu8i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu32i_BFu8i) C1{ Fc:7 Fi:32 Fi:8}



static void Test_BFu7c_BFu32i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu8i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_BFu32i_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu32i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu8i, BFu7c_BFu32i_BFu8i)
//============================================================================


struct  BFu7c_BFu32i_BFu8ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu32i_BFu8ll) C1{ Fc:7 Fi:32 FL:8}



static void Test_BFu7c_BFu32i_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu8ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_BFu32i_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu32i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu8ll, BFu7c_BFu32i_BFu8ll)
//============================================================================


struct  BFu7c_BFu32i_BFu8s  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu32i_BFu8s) C1{ Fc:7 Fi:32 Fs:8}



static void Test_BFu7c_BFu32i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu32i_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu8s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_BFu32i_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu32i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu8s, BFu7c_BFu32i_BFu8s)
//============================================================================


struct  BFu7c_BFu32i_BFu9i  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu32i_BFu9i) C1{ Fc:7 Fi:32 Fi:9}



static void Test_BFu7c_BFu32i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu32i_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu9i");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_BFu32i_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu32i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu9i, BFu7c_BFu32i_BFu9i)
//============================================================================


struct  BFu7c_BFu32i_BFu9ll  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu32i_BFu9ll) C1{ Fc:7 Fi:32 FL:9}



static void Test_BFu7c_BFu32i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu32i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu9ll");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_BFu32i_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu32i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu9ll, BFu7c_BFu32i_BFu9ll)
//============================================================================


struct  BFu7c_BFu32i_BFu9s  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu32i_BFu9s) C1{ Fc:7 Fi:32 Fs:9}



static void Test_BFu7c_BFu32i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu32i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu32i_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_BFu9s");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_BFu32i_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu32i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_BFu9s, BFu7c_BFu32i_BFu9s)
//============================================================================


struct  BFu7c_BFu32i_C  {
  unsigned char v1:7;
  unsigned int v2:32;
  char v3;
};
//SIG(1 BFu7c_BFu32i_C) C1{ Fc:7 Fi:32 Fc}



static void Test_BFu7c_BFu32i_C()
{
  {
    init_simple_test("BFu7c_BFu32i_C");
    static STRUCT_IF_C BFu7c_BFu32i_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_C");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_C");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_C, BFu7c_BFu32i_C)
//============================================================================


struct  BFu7c_BFu32i_D  {
  unsigned char v1:7;
  unsigned int v2:32;
  double v3;
};
//SIG(1 BFu7c_BFu32i_D) C1{ Fc:7 Fi:32 FL}



static void Test_BFu7c_BFu32i_D()
{
  {
    init_simple_test("BFu7c_BFu32i_D");
    static STRUCT_IF_C BFu7c_BFu32i_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu32i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_D");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_D");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_D, BFu7c_BFu32i_D)
//============================================================================


struct  BFu7c_BFu32i_F  {
  unsigned char v1:7;
  unsigned int v2:32;
  float v3;
};
//SIG(1 BFu7c_BFu32i_F) C1{ Fc:7 Fi:32 Fi}



static void Test_BFu7c_BFu32i_F()
{
  {
    init_simple_test("BFu7c_BFu32i_F");
    static STRUCT_IF_C BFu7c_BFu32i_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_F");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_F");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_F, BFu7c_BFu32i_F)
//============================================================================


struct  BFu7c_BFu32i_I  {
  unsigned char v1:7;
  unsigned int v2:32;
  int v3;
};
//SIG(1 BFu7c_BFu32i_I) C1{ Fc:7 Fi:32 Fi}



static void Test_BFu7c_BFu32i_I()
{
  {
    init_simple_test("BFu7c_BFu32i_I");
    static STRUCT_IF_C BFu7c_BFu32i_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_I");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_I");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_I, BFu7c_BFu32i_I)
//============================================================================


struct  BFu7c_BFu32i_Ip  {
  unsigned char v1:7;
  unsigned int v2:32;
  int *v3;
};
//SIG(1 BFu7c_BFu32i_Ip) C1{ Fc:7 Fi:32 Fp}



static void Test_BFu7c_BFu32i_Ip()
{
  {
    init_simple_test("BFu7c_BFu32i_Ip");
    static STRUCT_IF_C BFu7c_BFu32i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_Ip");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_Ip");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_Ip, BFu7c_BFu32i_Ip)
//============================================================================


struct  BFu7c_BFu32i_L  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu32i_L) C1{ Fc:7 Fi:32 FL}



static void Test_BFu7c_BFu32i_L()
{
  {
    init_simple_test("BFu7c_BFu32i_L");
    static STRUCT_IF_C BFu7c_BFu32i_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu32i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_L");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_L");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_L, BFu7c_BFu32i_L)
//============================================================================


struct  BFu7c_BFu32i_S  {
  unsigned char v1:7;
  unsigned int v2:32;
  short v3;
};
//SIG(1 BFu7c_BFu32i_S) C1{ Fc:7 Fi:32 Fs}



static void Test_BFu7c_BFu32i_S()
{
  {
    init_simple_test("BFu7c_BFu32i_S");
    static STRUCT_IF_C BFu7c_BFu32i_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_S");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_S");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_S, BFu7c_BFu32i_S)
//============================================================================


struct  BFu7c_BFu32i_Uc  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu32i_Uc) C1{ Fc:7 Fi:32 Fc}



static void Test_BFu7c_BFu32i_Uc()
{
  {
    init_simple_test("BFu7c_BFu32i_Uc");
    static STRUCT_IF_C BFu7c_BFu32i_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_Uc");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_Uc");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_Uc, BFu7c_BFu32i_Uc)
//============================================================================


struct  BFu7c_BFu32i_Ui  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu32i_Ui) C1{ Fc:7 Fi:32 Fi}



static void Test_BFu7c_BFu32i_Ui()
{
  {
    init_simple_test("BFu7c_BFu32i_Ui");
    static STRUCT_IF_C BFu7c_BFu32i_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_Ui");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_Ui");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_Ui, BFu7c_BFu32i_Ui)
//============================================================================


struct  BFu7c_BFu32i_Ul  {
  unsigned char v1:7;
  unsigned int v2:32;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu32i_Ul) C1{ Fc:7 Fi:32 FL}



static void Test_BFu7c_BFu32i_Ul()
{
  {
    init_simple_test("BFu7c_BFu32i_Ul");
    static STRUCT_IF_C BFu7c_BFu32i_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu32i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_Ul");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_Ul");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_Ul, BFu7c_BFu32i_Ul)
//============================================================================


struct  BFu7c_BFu32i_Us  {
  unsigned char v1:7;
  unsigned int v2:32;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu32i_Us) C1{ Fc:7 Fi:32 Fs}



static void Test_BFu7c_BFu32i_Us()
{
  {
    init_simple_test("BFu7c_BFu32i_Us");
    static STRUCT_IF_C BFu7c_BFu32i_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_BFu32i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu32i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_Us");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_Us");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_Us, BFu7c_BFu32i_Us)
//============================================================================


struct  BFu7c_BFu32i_Vp  {
  unsigned char v1:7;
  unsigned int v2:32;
  void *v3;
};
//SIG(1 BFu7c_BFu32i_Vp) C1{ Fc:7 Fi:32 Fp}



static void Test_BFu7c_BFu32i_Vp()
{
  {
    init_simple_test("BFu7c_BFu32i_Vp");
    static STRUCT_IF_C BFu7c_BFu32i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, 1, "BFu7c_BFu32i_Vp");
    set_bf_and_test(lv, v2, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32i_Vp");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32i_Vp, BFu7c_BFu32i_Vp)
//============================================================================


struct  BFu7c_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
};
//SIG(1 BFu7c_BFu32ll) C1{ Fc:7 FL:32}



static void Test_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll, BFu7c_BFu32ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu15i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu32ll_BFu15i) C1{ Fc:7 FL:32 Fi:15}



static void Test_BFu7c_BFu32ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu7c_BFu32ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu32ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu15i, BFu7c_BFu32ll_BFu15i)
//============================================================================


struct  BFu7c_BFu32ll_BFu15ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu32ll_BFu15ll) C1{ Fc:7 FL:32 FL:15}



static void Test_BFu7c_BFu32ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, 1, "BFu7c_BFu32ll_BFu15ll");
    set_bf_and_test(lv, v3, 4, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu32ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu15ll, BFu7c_BFu32ll_BFu15ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu15s  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu32ll_BFu15s) C1{ Fc:7 FL:32 Fs:15}



static void Test_BFu7c_BFu32ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7c_BFu32ll_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu32ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu15s, BFu7c_BFu32ll_BFu15s)
//============================================================================


struct  BFu7c_BFu32ll_BFu16i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu32ll_BFu16i) C1{ Fc:7 FL:32 Fi:16}



static void Test_BFu7c_BFu32ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu7c_BFu32ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu32ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu16i, BFu7c_BFu32ll_BFu16i)
//============================================================================


struct  BFu7c_BFu32ll_BFu16ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu32ll_BFu16ll) C1{ Fc:7 FL:32 FL:16}



static void Test_BFu7c_BFu32ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, 1, "BFu7c_BFu32ll_BFu16ll");
    set_bf_and_test(lv, v3, 4, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu32ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu16ll, BFu7c_BFu32ll_BFu16ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu16s  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu32ll_BFu16s) C1{ Fc:7 FL:32 Fs:16}



static void Test_BFu7c_BFu32ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7c_BFu32ll_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu32ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu16s, BFu7c_BFu32ll_BFu16s)
//============================================================================


struct  BFu7c_BFu32ll_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu32ll_BFu17i) C1{ Fc:7 FL:32 Fi:17}



static void Test_BFu7c_BFu32ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu7c_BFu32ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu32ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu17i, BFu7c_BFu32ll_BFu17i)
//============================================================================


struct  BFu7c_BFu32ll_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu32ll_BFu17ll) C1{ Fc:7 FL:32 FL:17}



static void Test_BFu7c_BFu32ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, 1, "BFu7c_BFu32ll_BFu17ll");
    set_bf_and_test(lv, v3, 4, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu32ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu17ll, BFu7c_BFu32ll_BFu17ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu1c  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu32ll_BFu1c) C1{ Fc:7 FL:32 Fc:1}



static void Test_BFu7c_BFu32ll_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu1c");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu1c");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7c_BFu32ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu1c, BFu7c_BFu32ll_BFu1c)
//============================================================================


struct  BFu7c_BFu32ll_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu32ll_BFu1i) C1{ Fc:7 FL:32 Fi:1}



static void Test_BFu7c_BFu32ll_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu1i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu1i");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7c_BFu32ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu1i, BFu7c_BFu32ll_BFu1i)
//============================================================================


struct  BFu7c_BFu32ll_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu32ll_BFu1ll) C1{ Fc:7 FL:32 FL:1}



static void Test_BFu7c_BFu32ll_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu1ll");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7c_BFu32ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu1ll, BFu7c_BFu32ll_BFu1ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu32ll_BFu1s) C1{ Fc:7 FL:32 Fs:1}



static void Test_BFu7c_BFu32ll_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu1s");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu1s");
    set_bf_and_test(lv, v3, 4, 7, 1, 1, "BFu7c_BFu32ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu1s, BFu7c_BFu32ll_BFu1s)
//============================================================================


struct  BFu7c_BFu32ll_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu32ll_BFu31i) C1{ Fc:7 FL:32 Fi:31}



static void Test_BFu7c_BFu32ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_BFu32ll_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu32ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu31i, BFu7c_BFu32ll_BFu31i)
//============================================================================


struct  BFu7c_BFu32ll_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu32ll_BFu31ll) C1{ Fc:7 FL:32 FL:31}



static void Test_BFu7c_BFu32ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, 1, "BFu7c_BFu32ll_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 31, hide_ull(1LL<<30), "BFu7c_BFu32ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu31ll, BFu7c_BFu32ll_BFu31ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu32ll_BFu32i) C1{ Fc:7 FL:32 Fi:32}



static void Test_BFu7c_BFu32ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_BFu32ll_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu32i, BFu7c_BFu32ll_BFu32i)
//============================================================================


struct  BFu7c_BFu32ll_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu32ll_BFu32ll) C1{ Fc:7 FL:32 FL:32}



static void Test_BFu7c_BFu32ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, 1, "BFu7c_BFu32ll_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu32ll, BFu7c_BFu32ll_BFu32ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu33  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu32ll_BFu33) C1{ Fc:7 FL:32 FL:33}



static void Test_BFu7c_BFu32ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, 1, "BFu7c_BFu32ll_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), ABISELECT(0,7), 33, hide_ull(1LL<<32), "BFu7c_BFu32ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu33, BFu7c_BFu32ll_BFu33)
//============================================================================


struct  BFu7c_BFu32ll_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu32ll_BFu7c) C1{ Fc:7 FL:32 Fc:7}



static void Test_BFu7c_BFu32ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7c_BFu32ll_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu7c, BFu7c_BFu32ll_BFu7c)
//============================================================================


struct  BFu7c_BFu32ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu32ll_BFu7i) C1{ Fc:7 FL:32 Fi:7}



static void Test_BFu7c_BFu32ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7c_BFu32ll_BFu7i");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu7i, BFu7c_BFu32ll_BFu7i)
//============================================================================


struct  BFu7c_BFu32ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu32ll_BFu7ll) C1{ Fc:7 FL:32 FL:7}



static void Test_BFu7c_BFu32ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7c_BFu32ll_BFu7ll");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu7ll, BFu7c_BFu32ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu32ll_BFu7s) C1{ Fc:7 FL:32 Fs:7}



static void Test_BFu7c_BFu32ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, 1, "BFu7c_BFu32ll_BFu7s");
    set_bf_and_test(lv, v3, 4, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu7s, BFu7c_BFu32ll_BFu7s)
//============================================================================


struct  BFu7c_BFu32ll_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu32ll_BFu8c) C1{ Fc:7 FL:32 Fc:8}



static void Test_BFu7c_BFu32ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7c_BFu32ll_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu32ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu8c, BFu7c_BFu32ll_BFu8c)
//============================================================================


struct  BFu7c_BFu32ll_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu32ll_BFu8i) C1{ Fc:7 FL:32 Fi:8}



static void Test_BFu7c_BFu32ll_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu8i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7c_BFu32ll_BFu8i");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu32ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu8i, BFu7c_BFu32ll_BFu8i)
//============================================================================


struct  BFu7c_BFu32ll_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu32ll_BFu8ll) C1{ Fc:7 FL:32 FL:8}



static void Test_BFu7c_BFu32ll_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7c_BFu32ll_BFu8ll");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu32ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu8ll, BFu7c_BFu32ll_BFu8ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu32ll_BFu8s) C1{ Fc:7 FL:32 Fs:8}



static void Test_BFu7c_BFu32ll_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu8s");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, 1, "BFu7c_BFu32ll_BFu8s");
    set_bf_and_test(lv, v3, 4, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu32ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu8s, BFu7c_BFu32ll_BFu8s)
//============================================================================


struct  BFu7c_BFu32ll_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu32ll_BFu9i) C1{ Fc:7 FL:32 Fi:9}



static void Test_BFu7c_BFu32ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7c_BFu32ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu32ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu9i, BFu7c_BFu32ll_BFu9i)
//============================================================================


struct  BFu7c_BFu32ll_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu32ll_BFu9ll) C1{ Fc:7 FL:32 FL:9}



static void Test_BFu7c_BFu32ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7c_BFu32ll_BFu9ll");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu32ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu9ll, BFu7c_BFu32ll_BFu9ll)
//============================================================================


struct  BFu7c_BFu32ll_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu32ll_BFu9s) C1{ Fc:7 FL:32 Fs:9}



static void Test_BFu7c_BFu32ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu32ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu32ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, 1, "BFu7c_BFu32ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu32ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_BFu9s, BFu7c_BFu32ll_BFu9s)
//============================================================================


struct  BFu7c_BFu32ll_C  {
  unsigned char v1:7;
  __tsu64 v2:32;
  char v3;
};
//SIG(1 BFu7c_BFu32ll_C) C1{ Fc:7 FL:32 Fc}



static void Test_BFu7c_BFu32ll_C()
{
  {
    init_simple_test("BFu7c_BFu32ll_C");
    static STRUCT_IF_C BFu7c_BFu32ll_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_C");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_C");
    check_field_offset(lv, v3, 5, "BFu7c_BFu32ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_C, BFu7c_BFu32ll_C)
//============================================================================


struct  BFu7c_BFu32ll_D  {
  unsigned char v1:7;
  __tsu64 v2:32;
  double v3;
};
//SIG(1 BFu7c_BFu32ll_D) C1{ Fc:7 FL:32 FL}



static void Test_BFu7c_BFu32ll_D()
{
  {
    init_simple_test("BFu7c_BFu32ll_D");
    static STRUCT_IF_C BFu7c_BFu32ll_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu32ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_D");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_D");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_D, BFu7c_BFu32ll_D)
//============================================================================


struct  BFu7c_BFu32ll_F  {
  unsigned char v1:7;
  __tsu64 v2:32;
  float v3;
};
//SIG(1 BFu7c_BFu32ll_F) C1{ Fc:7 FL:32 Fi}



static void Test_BFu7c_BFu32ll_F()
{
  {
    init_simple_test("BFu7c_BFu32ll_F");
    static STRUCT_IF_C BFu7c_BFu32ll_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_F");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_F");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_F, BFu7c_BFu32ll_F)
//============================================================================


struct  BFu7c_BFu32ll_I  {
  unsigned char v1:7;
  __tsu64 v2:32;
  int v3;
};
//SIG(1 BFu7c_BFu32ll_I) C1{ Fc:7 FL:32 Fi}



static void Test_BFu7c_BFu32ll_I()
{
  {
    init_simple_test("BFu7c_BFu32ll_I");
    static STRUCT_IF_C BFu7c_BFu32ll_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_I");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_I");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_I, BFu7c_BFu32ll_I)
//============================================================================


struct  BFu7c_BFu32ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:32;
  int *v3;
};
//SIG(1 BFu7c_BFu32ll_Ip) C1{ Fc:7 FL:32 Fp}



static void Test_BFu7c_BFu32ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu32ll_Ip");
    static STRUCT_IF_C BFu7c_BFu32ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_Ip");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_Ip, BFu7c_BFu32ll_Ip)
//============================================================================


struct  BFu7c_BFu32ll_L  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu32ll_L) C1{ Fc:7 FL:32 FL}



static void Test_BFu7c_BFu32ll_L()
{
  {
    init_simple_test("BFu7c_BFu32ll_L");
    static STRUCT_IF_C BFu7c_BFu32ll_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu32ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_L");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_L");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_L, BFu7c_BFu32ll_L)
//============================================================================


struct  BFu7c_BFu32ll_S  {
  unsigned char v1:7;
  __tsu64 v2:32;
  short v3;
};
//SIG(1 BFu7c_BFu32ll_S) C1{ Fc:7 FL:32 Fs}



static void Test_BFu7c_BFu32ll_S()
{
  {
    init_simple_test("BFu7c_BFu32ll_S");
    static STRUCT_IF_C BFu7c_BFu32ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_S");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_S");
    check_field_offset(lv, v3, 6, "BFu7c_BFu32ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_S, BFu7c_BFu32ll_S)
//============================================================================


struct  BFu7c_BFu32ll_Uc  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu32ll_Uc) C1{ Fc:7 FL:32 Fc}



static void Test_BFu7c_BFu32ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu32ll_Uc");
    static STRUCT_IF_C BFu7c_BFu32ll_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_Uc");
    check_field_offset(lv, v3, 5, "BFu7c_BFu32ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_Uc, BFu7c_BFu32ll_Uc)
//============================================================================


struct  BFu7c_BFu32ll_Ui  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu32ll_Ui) C1{ Fc:7 FL:32 Fi}



static void Test_BFu7c_BFu32ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu32ll_Ui");
    static STRUCT_IF_C BFu7c_BFu32ll_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_Ui");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_Ui, BFu7c_BFu32ll_Ui)
//============================================================================


struct  BFu7c_BFu32ll_Ul  {
  unsigned char v1:7;
  __tsu64 v2:32;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu32ll_Ul) C1{ Fc:7 FL:32 FL}



static void Test_BFu7c_BFu32ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu32ll_Ul");
    static STRUCT_IF_C BFu7c_BFu32ll_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu32ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_Ul");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_Ul, BFu7c_BFu32ll_Ul)
//============================================================================


struct  BFu7c_BFu32ll_Us  {
  unsigned char v1:7;
  __tsu64 v2:32;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu32ll_Us) C1{ Fc:7 FL:32 Fs}



static void Test_BFu7c_BFu32ll_Us()
{
  {
    init_simple_test("BFu7c_BFu32ll_Us");
    static STRUCT_IF_C BFu7c_BFu32ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu32ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_Us");
    check_field_offset(lv, v3, 6, "BFu7c_BFu32ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_Us, BFu7c_BFu32ll_Us)
//============================================================================


struct  BFu7c_BFu32ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:32;
  void *v3;
};
//SIG(1 BFu7c_BFu32ll_Vp) C1{ Fc:7 FL:32 Fp}



static void Test_BFu7c_BFu32ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu32ll_Vp");
    static STRUCT_IF_C BFu7c_BFu32ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu32ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu32ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu32ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 32, 1, "BFu7c_BFu32ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu32ll_Vp");
    check_field_offset(lv, v3, 8, "BFu7c_BFu32ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu32ll_Vp, BFu7c_BFu32ll_Vp)
//============================================================================


struct  BFu7c_BFu33  {
  unsigned char v1:7;
  __tsu64 v2:33;
};
//SIG(1 BFu7c_BFu33) C1{ Fc:7 FL:33}



static void Test_BFu7c_BFu33()
{
  {
    init_simple_test("BFu7c_BFu33");
    static STRUCT_IF_C BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33, BFu7c_BFu33)
//============================================================================


struct  BFu7c_BFu33_BFu15i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu33_BFu15i) C1{ Fc:7 FL:33 Fi:15}



static void Test_BFu7c_BFu33_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu15i");
    static STRUCT_IF_C BFu7c_BFu33_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu7c_BFu33_BFu15i");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu33_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu15i, BFu7c_BFu33_BFu15i)
//============================================================================


struct  BFu7c_BFu33_BFu15ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu33_BFu15ll) C1{ Fc:7 FL:33 FL:15}



static void Test_BFu7c_BFu33_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, 1, "BFu7c_BFu33_BFu15ll");
    set_bf_and_test(lv, v3, 5, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu33_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu15ll, BFu7c_BFu33_BFu15ll)
//============================================================================


struct  BFu7c_BFu33_BFu15s  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu33_BFu15s) C1{ Fc:7 FL:33 Fs:15}



static void Test_BFu7c_BFu33_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu33_BFu15s");
    static STRUCT_IF_C BFu7c_BFu33_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, 1, "BFu7c_BFu33_BFu15s");
    set_bf_and_test(lv, v3, 6, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu33_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu15s, BFu7c_BFu33_BFu15s)
//============================================================================


struct  BFu7c_BFu33_BFu16i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu33_BFu16i) C1{ Fc:7 FL:33 Fi:16}



static void Test_BFu7c_BFu33_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu16i");
    static STRUCT_IF_C BFu7c_BFu33_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu7c_BFu33_BFu16i");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu33_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu16i, BFu7c_BFu33_BFu16i)
//============================================================================


struct  BFu7c_BFu33_BFu16ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu33_BFu16ll) C1{ Fc:7 FL:33 FL:16}



static void Test_BFu7c_BFu33_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, 1, "BFu7c_BFu33_BFu16ll");
    set_bf_and_test(lv, v3, 5, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu33_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu16ll, BFu7c_BFu33_BFu16ll)
//============================================================================


struct  BFu7c_BFu33_BFu16s  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu33_BFu16s) C1{ Fc:7 FL:33 Fs:16}



static void Test_BFu7c_BFu33_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu33_BFu16s");
    static STRUCT_IF_C BFu7c_BFu33_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, 1, "BFu7c_BFu33_BFu16s");
    set_bf_and_test(lv, v3, 6, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu33_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu16s, BFu7c_BFu33_BFu16s)
//============================================================================


struct  BFu7c_BFu33_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu33_BFu17i) C1{ Fc:7 FL:33 Fi:17}



static void Test_BFu7c_BFu33_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu17i");
    static STRUCT_IF_C BFu7c_BFu33_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu7c_BFu33_BFu17i");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu33_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu17i, BFu7c_BFu33_BFu17i)
//============================================================================


struct  BFu7c_BFu33_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu33_BFu17ll) C1{ Fc:7 FL:33 FL:17}



static void Test_BFu7c_BFu33_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, 1, "BFu7c_BFu33_BFu17ll");
    set_bf_and_test(lv, v3, 5, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu33_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu17ll, BFu7c_BFu33_BFu17ll)
//============================================================================


struct  BFu7c_BFu33_BFu1c  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu33_BFu1c) C1{ Fc:7 FL:33 Fc:1}



static void Test_BFu7c_BFu33_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu33_BFu1c");
    static STRUCT_IF_C BFu7c_BFu33_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu1c");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7c_BFu33_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu1c, BFu7c_BFu33_BFu1c)
//============================================================================


struct  BFu7c_BFu33_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu33_BFu1i) C1{ Fc:7 FL:33 Fi:1}



static void Test_BFu7c_BFu33_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu1i");
    static STRUCT_IF_C BFu7c_BFu33_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu1i");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7c_BFu33_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu1i, BFu7c_BFu33_BFu1i)
//============================================================================


struct  BFu7c_BFu33_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu33_BFu1ll) C1{ Fc:7 FL:33 FL:1}



static void Test_BFu7c_BFu33_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu1ll");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7c_BFu33_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu1ll, BFu7c_BFu33_BFu1ll)
//============================================================================


struct  BFu7c_BFu33_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu33_BFu1s) C1{ Fc:7 FL:33 Fs:1}



static void Test_BFu7c_BFu33_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu33_BFu1s");
    static STRUCT_IF_C BFu7c_BFu33_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu1s");
    set_bf_and_test(lv, v3, 5, 0, 1, 1, "BFu7c_BFu33_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu1s, BFu7c_BFu33_BFu1s)
//============================================================================


struct  BFu7c_BFu33_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu33_BFu31i) C1{ Fc:7 FL:33 Fi:31}



static void Test_BFu7c_BFu33_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu31i");
    static STRUCT_IF_C BFu7c_BFu33_BFu31i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_BFu33_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu33_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu31i, BFu7c_BFu33_BFu31i)
//============================================================================


struct  BFu7c_BFu33_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu33_BFu31ll) C1{ Fc:7 FL:33 FL:31}



static void Test_BFu7c_BFu33_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, 1, "BFu7c_BFu33_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 31, hide_ull(1LL<<30), "BFu7c_BFu33_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu31ll, BFu7c_BFu33_BFu31ll)
//============================================================================


struct  BFu7c_BFu33_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu33_BFu32i) C1{ Fc:7 FL:33 Fi:32}



static void Test_BFu7c_BFu33_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu32i");
    static STRUCT_IF_C BFu7c_BFu33_BFu32i lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_BFu33_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu33_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu32i, BFu7c_BFu33_BFu32i)
//============================================================================


struct  BFu7c_BFu33_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu33_BFu32ll) C1{ Fc:7 FL:33 FL:32}



static void Test_BFu7c_BFu33_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, 1, "BFu7c_BFu33_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 32, hide_ull(1LL<<31), "BFu7c_BFu33_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu32ll, BFu7c_BFu33_BFu32ll)
//============================================================================


struct  BFu7c_BFu33_BFu33  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu33_BFu33) C1{ Fc:7 FL:33 FL:33}



static void Test_BFu7c_BFu33_BFu33()
{
  {
    init_simple_test("BFu7c_BFu33_BFu33");
    static STRUCT_IF_C BFu7c_BFu33_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, 1, "BFu7c_BFu33_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,5), 0, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu33, BFu7c_BFu33_BFu33)
//============================================================================


struct  BFu7c_BFu33_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu33_BFu7c) C1{ Fc:7 FL:33 Fc:7}



static void Test_BFu7c_BFu33_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu33_BFu7c");
    static STRUCT_IF_C BFu7c_BFu33_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7c_BFu33_BFu7c");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu7c, BFu7c_BFu33_BFu7c)
//============================================================================


struct  BFu7c_BFu33_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu33_BFu7i) C1{ Fc:7 FL:33 Fi:7}



static void Test_BFu7c_BFu33_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu7i");
    static STRUCT_IF_C BFu7c_BFu33_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7c_BFu33_BFu7i");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu7i, BFu7c_BFu33_BFu7i)
//============================================================================


struct  BFu7c_BFu33_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu33_BFu7ll) C1{ Fc:7 FL:33 FL:7}



static void Test_BFu7c_BFu33_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7c_BFu33_BFu7ll");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu7ll, BFu7c_BFu33_BFu7ll)
//============================================================================


struct  BFu7c_BFu33_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu33_BFu7s) C1{ Fc:7 FL:33 Fs:7}



static void Test_BFu7c_BFu33_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu33_BFu7s");
    static STRUCT_IF_C BFu7c_BFu33_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, 1, "BFu7c_BFu33_BFu7s");
    set_bf_and_test(lv, v3, 5, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu7s, BFu7c_BFu33_BFu7s)
//============================================================================


struct  BFu7c_BFu33_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu33_BFu8c) C1{ Fc:7 FL:33 Fc:8}



static void Test_BFu7c_BFu33_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu33_BFu8c");
    static STRUCT_IF_C BFu7c_BFu33_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7c_BFu33_BFu8c");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu33_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu8c, BFu7c_BFu33_BFu8c)
//============================================================================


struct  BFu7c_BFu33_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu33_BFu8i) C1{ Fc:7 FL:33 Fi:8}



static void Test_BFu7c_BFu33_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu8i");
    static STRUCT_IF_C BFu7c_BFu33_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7c_BFu33_BFu8i");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu33_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu8i, BFu7c_BFu33_BFu8i)
//============================================================================


struct  BFu7c_BFu33_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu33_BFu8ll) C1{ Fc:7 FL:33 FL:8}



static void Test_BFu7c_BFu33_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7c_BFu33_BFu8ll");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu33_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu8ll, BFu7c_BFu33_BFu8ll)
//============================================================================


struct  BFu7c_BFu33_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu33_BFu8s) C1{ Fc:7 FL:33 Fs:8}



static void Test_BFu7c_BFu33_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu33_BFu8s");
    static STRUCT_IF_C BFu7c_BFu33_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, 1, "BFu7c_BFu33_BFu8s");
    set_bf_and_test(lv, v3, 5, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu33_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu8s, BFu7c_BFu33_BFu8s)
//============================================================================


struct  BFu7c_BFu33_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu33_BFu9i) C1{ Fc:7 FL:33 Fi:9}



static void Test_BFu7c_BFu33_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu33_BFu9i");
    static STRUCT_IF_C BFu7c_BFu33_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu7c_BFu33_BFu9i");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu33_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu9i, BFu7c_BFu33_BFu9i)
//============================================================================


struct  BFu7c_BFu33_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu33_BFu9ll) C1{ Fc:7 FL:33 FL:9}



static void Test_BFu7c_BFu33_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu33_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu33_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, 1, "BFu7c_BFu33_BFu9ll");
    set_bf_and_test(lv, v3, 5, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu33_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu9ll, BFu7c_BFu33_BFu9ll)
//============================================================================


struct  BFu7c_BFu33_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu33_BFu9s) C1{ Fc:7 FL:33 Fs:9}



static void Test_BFu7c_BFu33_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu33_BFu9s");
    static STRUCT_IF_C BFu7c_BFu33_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, 1, "BFu7c_BFu33_BFu9s");
    set_bf_and_test(lv, v3, 6, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu33_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_BFu9s, BFu7c_BFu33_BFu9s)
//============================================================================


struct  BFu7c_BFu33_C  {
  unsigned char v1:7;
  __tsu64 v2:33;
  char v3;
};
//SIG(1 BFu7c_BFu33_C) C1{ Fc:7 FL:33 Fc}



static void Test_BFu7c_BFu33_C()
{
  {
    init_simple_test("BFu7c_BFu33_C");
    static STRUCT_IF_C BFu7c_BFu33_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_C");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_C");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_C");
    check_field_offset(lv, v3, 5, "BFu7c_BFu33_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_C, BFu7c_BFu33_C)
//============================================================================


struct  BFu7c_BFu33_D  {
  unsigned char v1:7;
  __tsu64 v2:33;
  double v3;
};
//SIG(1 BFu7c_BFu33_D) C1{ Fc:7 FL:33 FL}



static void Test_BFu7c_BFu33_D()
{
  {
    init_simple_test("BFu7c_BFu33_D");
    static STRUCT_IF_C BFu7c_BFu33_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu33_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_D");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_D");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_D");
    check_field_offset(lv, v3, 8, "BFu7c_BFu33_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_D, BFu7c_BFu33_D)
//============================================================================


struct  BFu7c_BFu33_F  {
  unsigned char v1:7;
  __tsu64 v2:33;
  float v3;
};
//SIG(1 BFu7c_BFu33_F) C1{ Fc:7 FL:33 Fi}



static void Test_BFu7c_BFu33_F()
{
  {
    init_simple_test("BFu7c_BFu33_F");
    static STRUCT_IF_C BFu7c_BFu33_F lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_F");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_F");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_F");
    check_field_offset(lv, v3, 8, "BFu7c_BFu33_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_F, BFu7c_BFu33_F)
//============================================================================


struct  BFu7c_BFu33_I  {
  unsigned char v1:7;
  __tsu64 v2:33;
  int v3;
};
//SIG(1 BFu7c_BFu33_I) C1{ Fc:7 FL:33 Fi}



static void Test_BFu7c_BFu33_I()
{
  {
    init_simple_test("BFu7c_BFu33_I");
    static STRUCT_IF_C BFu7c_BFu33_I lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_I");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_I");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_I");
    check_field_offset(lv, v3, 8, "BFu7c_BFu33_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_I, BFu7c_BFu33_I)
//============================================================================


struct  BFu7c_BFu33_Ip  {
  unsigned char v1:7;
  __tsu64 v2:33;
  int *v3;
};
//SIG(1 BFu7c_BFu33_Ip) C1{ Fc:7 FL:33 Fp}



static void Test_BFu7c_BFu33_Ip()
{
  {
    init_simple_test("BFu7c_BFu33_Ip");
    static STRUCT_IF_C BFu7c_BFu33_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_Ip");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_Ip");
    check_field_offset(lv, v3, 8, "BFu7c_BFu33_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_Ip, BFu7c_BFu33_Ip)
//============================================================================


struct  BFu7c_BFu33_L  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu33_L) C1{ Fc:7 FL:33 FL}



static void Test_BFu7c_BFu33_L()
{
  {
    init_simple_test("BFu7c_BFu33_L");
    static STRUCT_IF_C BFu7c_BFu33_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu33_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_L");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_L");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_L");
    check_field_offset(lv, v3, 8, "BFu7c_BFu33_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_L, BFu7c_BFu33_L)
//============================================================================


struct  BFu7c_BFu33_S  {
  unsigned char v1:7;
  __tsu64 v2:33;
  short v3;
};
//SIG(1 BFu7c_BFu33_S) C1{ Fc:7 FL:33 Fs}



static void Test_BFu7c_BFu33_S()
{
  {
    init_simple_test("BFu7c_BFu33_S");
    static STRUCT_IF_C BFu7c_BFu33_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_S");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_S");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_S");
    check_field_offset(lv, v3, 6, "BFu7c_BFu33_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_S, BFu7c_BFu33_S)
//============================================================================


struct  BFu7c_BFu33_Uc  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu33_Uc) C1{ Fc:7 FL:33 Fc}



static void Test_BFu7c_BFu33_Uc()
{
  {
    init_simple_test("BFu7c_BFu33_Uc");
    static STRUCT_IF_C BFu7c_BFu33_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_Uc");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_Uc");
    check_field_offset(lv, v3, 5, "BFu7c_BFu33_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_Uc, BFu7c_BFu33_Uc)
//============================================================================


struct  BFu7c_BFu33_Ui  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu33_Ui) C1{ Fc:7 FL:33 Fi}



static void Test_BFu7c_BFu33_Ui()
{
  {
    init_simple_test("BFu7c_BFu33_Ui");
    static STRUCT_IF_C BFu7c_BFu33_Ui lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_Ui");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_Ui");
    check_field_offset(lv, v3, 8, "BFu7c_BFu33_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_Ui, BFu7c_BFu33_Ui)
//============================================================================


struct  BFu7c_BFu33_Ul  {
  unsigned char v1:7;
  __tsu64 v2:33;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu33_Ul) C1{ Fc:7 FL:33 FL}



static void Test_BFu7c_BFu33_Ul()
{
  {
    init_simple_test("BFu7c_BFu33_Ul");
    static STRUCT_IF_C BFu7c_BFu33_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_BFu33_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_Ul");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_Ul");
    check_field_offset(lv, v3, 8, "BFu7c_BFu33_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_Ul, BFu7c_BFu33_Ul)
//============================================================================


struct  BFu7c_BFu33_Us  {
  unsigned char v1:7;
  __tsu64 v2:33;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu33_Us) C1{ Fc:7 FL:33 Fs}



static void Test_BFu7c_BFu33_Us()
{
  {
    init_simple_test("BFu7c_BFu33_Us");
    static STRUCT_IF_C BFu7c_BFu33_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu33_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_Us");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_Us");
    check_field_offset(lv, v3, 6, "BFu7c_BFu33_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_Us, BFu7c_BFu33_Us)
//============================================================================


struct  BFu7c_BFu33_Vp  {
  unsigned char v1:7;
  __tsu64 v2:33;
  void *v3;
};
//SIG(1 BFu7c_BFu33_Vp) C1{ Fc:7 FL:33 Fp}



static void Test_BFu7c_BFu33_Vp()
{
  {
    init_simple_test("BFu7c_BFu33_Vp");
    static STRUCT_IF_C BFu7c_BFu33_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu33_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu33_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu33_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 7, 33, 1, "BFu7c_BFu33_Vp");
    set_bf_and_test(lv, v2, 0, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu33_Vp");
    check_field_offset(lv, v3, 8, "BFu7c_BFu33_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu33_Vp, BFu7c_BFu33_Vp)
//============================================================================


struct  BFu7c_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
};
//SIG(1 BFu7c_BFu7c) C1{ Fc:7 Fc:7}



static void Test_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c, BFu7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c, BFu7c_BFu7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7c_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c_BFs7c, BFu7c_BFu7c_BFs7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7c_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c_BFs7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c_BFs7i, BFu7c_BFu7c_BFs7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7c_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c_BFs7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c_BFs7ll, BFu7c_BFu7c_BFs7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7c_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c_BFs7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c_BFs7s, BFu7c_BFu7c_BFs7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFs7c_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c_BFu7c, BFu7c_BFu7c_BFs7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7c_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c_BFu7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c_BFu7i, BFu7c_BFu7c_BFs7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7c_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c_BFu7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c_BFu7ll, BFu7c_BFu7c_BFs7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7c_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7c_BFu7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7c_BFu7s, BFu7c_BFu7c_BFs7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i) C1{ Fc:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i, BFu7c_BFu7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7i_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i_BFs7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i_BFs7c, BFu7c_BFu7c_BFs7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7i_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i_BFs7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i_BFs7i, BFu7c_BFu7c_BFs7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7i_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i_BFs7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i_BFs7ll, BFu7c_BFu7c_BFs7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7i_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i_BFs7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i_BFs7s, BFu7c_BFu7c_BFs7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFs7i_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i_BFu7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i_BFu7c, BFu7c_BFu7c_BFs7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7i_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i_BFu7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i_BFu7i, BFu7c_BFu7c_BFs7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7i_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i_BFu7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i_BFu7ll, BFu7c_BFu7c_BFs7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7i_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7i_BFu7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7i_BFu7s, BFu7c_BFu7c_BFs7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll) C1{ Fc:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll, BFu7c_BFu7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll_BFs7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll_BFs7c, BFu7c_BFu7c_BFs7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll_BFs7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll_BFs7i, BFu7c_BFu7c_BFs7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll_BFs7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll_BFs7ll, BFu7c_BFu7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll_BFs7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll_BFs7s, BFu7c_BFu7c_BFs7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll_BFu7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll_BFu7c, BFu7c_BFu7c_BFs7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll_BFu7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll_BFu7i, BFu7c_BFu7c_BFs7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll_BFu7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll_BFu7ll, BFu7c_BFu7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7ll_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7ll_BFu7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7ll_BFu7s, BFu7c_BFu7c_BFs7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s) C1{ Fc:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s, BFu7c_BFu7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFs7s_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s_BFs7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s_BFs7c, BFu7c_BFu7c_BFs7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7s_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s_BFs7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s_BFs7i, BFu7c_BFu7c_BFs7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7s_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s_BFs7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s_BFs7ll, BFu7c_BFu7c_BFs7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7s_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s_BFs7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s_BFs7s, BFu7c_BFu7c_BFs7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFs7s_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s_BFu7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s_BFu7c, BFu7c_BFu7c_BFs7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFs7s_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s_BFu7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s_BFu7i, BFu7c_BFu7c_BFs7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFs7s_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s_BFu7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s_BFu7ll, BFu7c_BFu7c_BFs7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFs7s_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFs7s_BFu7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFs7s_BFu7s, BFu7c_BFu7c_BFs7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFu15i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu7c_BFu15i) C1{ Fc:7 Fc:7 Fi:15}



static void Test_BFu7c_BFu7c_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu15i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7c_BFu7c_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu7c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu15i, BFu7c_BFu7c_BFu15i)
//============================================================================


struct  BFu7c_BFu7c_BFu15ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu7c_BFu15ll) C1{ Fc:7 Fc:7 FL:15}



static void Test_BFu7c_BFu7c_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7c_BFu7c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu7c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu15ll, BFu7c_BFu7c_BFu15ll)
//============================================================================


struct  BFu7c_BFu7c_BFu15s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu7c_BFu15s) C1{ Fc:7 Fc:7 Fs:15}



static void Test_BFu7c_BFu7c_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu15s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu7c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu7c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu15s, BFu7c_BFu7c_BFu15s)
//============================================================================


struct  BFu7c_BFu7c_BFu16i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu7c_BFu16i) C1{ Fc:7 Fc:7 Fi:16}



static void Test_BFu7c_BFu7c_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu16i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7c_BFu7c_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu7c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu16i, BFu7c_BFu7c_BFu16i)
//============================================================================


struct  BFu7c_BFu7c_BFu16ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu7c_BFu16ll) C1{ Fc:7 Fc:7 FL:16}



static void Test_BFu7c_BFu7c_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7c_BFu7c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu7c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu16ll, BFu7c_BFu7c_BFu16ll)
//============================================================================


struct  BFu7c_BFu7c_BFu16s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu7c_BFu16s) C1{ Fc:7 Fc:7 Fs:16}



static void Test_BFu7c_BFu7c_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu16s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu7c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu7c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu16s, BFu7c_BFu7c_BFu16s)
//============================================================================


struct  BFu7c_BFu7c_BFu17i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu7c_BFu17i) C1{ Fc:7 Fc:7 Fi:17}



static void Test_BFu7c_BFu7c_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu17i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7c_BFu7c_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu7c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu17i, BFu7c_BFu7c_BFu17i)
//============================================================================


struct  BFu7c_BFu7c_BFu17ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu7c_BFu17ll) C1{ Fc:7 Fc:7 FL:17}



static void Test_BFu7c_BFu7c_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7c_BFu7c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu7c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu17ll, BFu7c_BFu7c_BFu17ll)
//============================================================================


struct  BFu7c_BFu7c_BFu1c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu7c_BFu1c) C1{ Fc:7 Fc:7 Fc:1}



static void Test_BFu7c_BFu7c_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu1c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu7c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu1c, BFu7c_BFu7c_BFu1c)
//============================================================================


struct  BFu7c_BFu7c_BFu1i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu7c_BFu1i) C1{ Fc:7 Fc:7 Fi:1}



static void Test_BFu7c_BFu7c_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu1i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu7c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu1i, BFu7c_BFu7c_BFu1i)
//============================================================================


struct  BFu7c_BFu7c_BFu1ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu7c_BFu1ll) C1{ Fc:7 Fc:7 FL:1}



static void Test_BFu7c_BFu7c_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu7c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu1ll, BFu7c_BFu7c_BFu1ll)
//============================================================================


struct  BFu7c_BFu7c_BFu1s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu7c_BFu1s) C1{ Fc:7 Fc:7 Fs:1}



static void Test_BFu7c_BFu7c_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu1s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu7c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu1s, BFu7c_BFu7c_BFu1s)
//============================================================================


struct  BFu7c_BFu7c_BFu31i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu7c_BFu31i) C1{ Fc:7 Fc:7 Fi:31}



static void Test_BFu7c_BFu7c_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu31i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu7c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu7c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu31i, BFu7c_BFu7c_BFu31i)
//============================================================================


struct  BFu7c_BFu7c_BFu31ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu7c_BFu31ll) C1{ Fc:7 Fc:7 FL:31}



static void Test_BFu7c_BFu7c_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7c_BFu7c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu7c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu31ll, BFu7c_BFu7c_BFu31ll)
//============================================================================


struct  BFu7c_BFu7c_BFu32i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu7c_BFu32i) C1{ Fc:7 Fc:7 Fi:32}



static void Test_BFu7c_BFu7c_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu32i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu7c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu7c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu32i, BFu7c_BFu7c_BFu32i)
//============================================================================


struct  BFu7c_BFu7c_BFu32ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu7c_BFu32ll) C1{ Fc:7 Fc:7 FL:32}



static void Test_BFu7c_BFu7c_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7c_BFu7c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu7c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu32ll, BFu7c_BFu7c_BFu32ll)
//============================================================================


struct  BFu7c_BFu7c_BFu33  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu7c_BFu33) C1{ Fc:7 Fc:7 FL:33}



static void Test_BFu7c_BFu7c_BFu33()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu33");
    static STRUCT_IF_C BFu7c_BFu7c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7c_BFu7c_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu7c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu33, BFu7c_BFu7c_BFu33)
//============================================================================


struct  BFu7c_BFu7c_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c, BFu7c_BFu7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7c_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c_BFs7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c_BFs7c, BFu7c_BFu7c_BFu7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7c_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c_BFs7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c_BFs7i, BFu7c_BFu7c_BFu7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7c_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c_BFs7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c_BFs7ll, BFu7c_BFu7c_BFu7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7c_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c_BFs7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c_BFs7s, BFu7c_BFu7c_BFu7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFu7c_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c_BFu7c) C1{ Fc:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c_BFu7c, BFu7c_BFu7c_BFu7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7c_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c_BFu7i) C1{ Fc:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c_BFu7i, BFu7c_BFu7c_BFu7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7c_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c_BFu7ll) C1{ Fc:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c_BFu7ll, BFu7c_BFu7c_BFu7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7c_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7c_BFu7s) C1{ Fc:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7c_BFu7s, BFu7c_BFu7c_BFu7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i) C1{ Fc:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i, BFu7c_BFu7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7i_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i_BFs7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i_BFs7c, BFu7c_BFu7c_BFu7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7i_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i_BFs7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i_BFs7i, BFu7c_BFu7c_BFu7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7i_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i_BFs7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i_BFs7ll, BFu7c_BFu7c_BFu7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7i_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i_BFs7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i_BFs7s, BFu7c_BFu7c_BFu7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFu7i_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i_BFu7c) C1{ Fc:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i_BFu7c, BFu7c_BFu7c_BFu7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7i_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i_BFu7i) C1{ Fc:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i_BFu7i, BFu7c_BFu7c_BFu7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7i_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i_BFu7ll) C1{ Fc:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i_BFu7ll, BFu7c_BFu7c_BFu7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7i_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7i_BFu7s) C1{ Fc:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7i_BFu7s, BFu7c_BFu7c_BFu7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll) C1{ Fc:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll, BFu7c_BFu7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll_BFs7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll_BFs7c, BFu7c_BFu7c_BFu7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll_BFs7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll_BFs7i, BFu7c_BFu7c_BFu7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll_BFs7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll_BFs7ll, BFu7c_BFu7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll_BFs7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll_BFs7s, BFu7c_BFu7c_BFu7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll_BFu7c) C1{ Fc:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll_BFu7c, BFu7c_BFu7c_BFu7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll_BFu7i) C1{ Fc:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll_BFu7i, BFu7c_BFu7c_BFu7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll_BFu7ll) C1{ Fc:7 Fc:7 FL:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll_BFu7ll, BFu7c_BFu7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7ll_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7ll_BFu7s) C1{ Fc:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7c_BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7ll_BFu7s, BFu7c_BFu7c_BFu7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s) C1{ Fc:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s, BFu7c_BFu7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFu7s_BFs7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s_BFs7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s_BFs7c, BFu7c_BFu7c_BFu7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7s_BFs7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s_BFs7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s_BFs7i, BFu7c_BFu7c_BFu7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7s_BFs7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s_BFs7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s_BFs7ll, BFu7c_BFu7c_BFu7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7s_BFs7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s_BFs7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s_BFs7s, BFu7c_BFu7c_BFu7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7c_BFu7s_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s_BFu7c) C1{ Fc:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s_BFu7c, BFu7c_BFu7c_BFu7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7c_BFu7s_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s_BFu7i) C1{ Fc:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s_BFu7i, BFu7c_BFu7c_BFu7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7c_BFu7s_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s_BFu7ll) C1{ Fc:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s_BFu7ll, BFu7c_BFu7c_BFu7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7c_BFu7s_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7c_BFu7s_BFu7s) C1{ Fc:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu7s_BFu7s, BFu7c_BFu7c_BFu7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7c_BFu8c  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu7c_BFu8c) C1{ Fc:7 Fc:7 Fc:8}



static void Test_BFu7c_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu8c");
    static STRUCT_IF_C BFu7c_BFu7c_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu7c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu7c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu8c, BFu7c_BFu7c_BFu8c)
//============================================================================


struct  BFu7c_BFu7c_BFu8i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu7c_BFu8i) C1{ Fc:7 Fc:7 Fi:8}



static void Test_BFu7c_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu8i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7c_BFu7c_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu8i, BFu7c_BFu7c_BFu8i)
//============================================================================


struct  BFu7c_BFu7c_BFu8ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu7c_BFu8ll) C1{ Fc:7 Fc:7 FL:8}



static void Test_BFu7c_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7c_BFu7c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu8ll, BFu7c_BFu7c_BFu8ll)
//============================================================================


struct  BFu7c_BFu7c_BFu8s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu7c_BFu8s) C1{ Fc:7 Fc:7 Fs:8}



static void Test_BFu7c_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu8s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu7c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu8s, BFu7c_BFu7c_BFu8s)
//============================================================================


struct  BFu7c_BFu7c_BFu9i  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu7c_BFu9i) C1{ Fc:7 Fc:7 Fi:9}



static void Test_BFu7c_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu9i");
    static STRUCT_IF_C BFu7c_BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7c_BFu7c_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu9i, BFu7c_BFu7c_BFu9i)
//============================================================================


struct  BFu7c_BFu7c_BFu9ll  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu7c_BFu9ll) C1{ Fc:7 Fc:7 FL:9}



static void Test_BFu7c_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7c_BFu7c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu9ll, BFu7c_BFu7c_BFu9ll)
//============================================================================


struct  BFu7c_BFu7c_BFu9s  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu7c_BFu9s) C1{ Fc:7 Fc:7 Fs:9}



static void Test_BFu7c_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu7c_BFu9s");
    static STRUCT_IF_C BFu7c_BFu7c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu7c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_BFu9s, BFu7c_BFu7c_BFu9s)
//============================================================================


struct  BFu7c_BFu7c_C  {
  unsigned char v1:7;
  unsigned char v2:7;
  char v3;
};
//SIG(1 BFu7c_BFu7c_C) C1{ Fc:7 Fc:7 Fc}



static void Test_BFu7c_BFu7c_C()
{
  {
    init_simple_test("BFu7c_BFu7c_C");
    static STRUCT_IF_C BFu7c_BFu7c_C lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu7c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_C");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_C, BFu7c_BFu7c_C)
//============================================================================


struct  BFu7c_BFu7c_D  {
  unsigned char v1:7;
  unsigned char v2:7;
  double v3;
};
//SIG(1 BFu7c_BFu7c_D) C1{ Fc:7 Fc:7 FL}



static void Test_BFu7c_BFu7c_D()
{
  {
    init_simple_test("BFu7c_BFu7c_D");
    static STRUCT_IF_C BFu7c_BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_D");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_D, BFu7c_BFu7c_D)
//============================================================================


struct  BFu7c_BFu7c_F  {
  unsigned char v1:7;
  unsigned char v2:7;
  float v3;
};
//SIG(1 BFu7c_BFu7c_F) C1{ Fc:7 Fc:7 Fi}



static void Test_BFu7c_BFu7c_F()
{
  {
    init_simple_test("BFu7c_BFu7c_F");
    static STRUCT_IF_C BFu7c_BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_F");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_F, BFu7c_BFu7c_F)
//============================================================================


struct  BFu7c_BFu7c_I  {
  unsigned char v1:7;
  unsigned char v2:7;
  int v3;
};
//SIG(1 BFu7c_BFu7c_I) C1{ Fc:7 Fc:7 Fi}



static void Test_BFu7c_BFu7c_I()
{
  {
    init_simple_test("BFu7c_BFu7c_I");
    static STRUCT_IF_C BFu7c_BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_I");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_I, BFu7c_BFu7c_I)
//============================================================================


struct  BFu7c_BFu7c_Ip  {
  unsigned char v1:7;
  unsigned char v2:7;
  int *v3;
};
//SIG(1 BFu7c_BFu7c_Ip) C1{ Fc:7 Fc:7 Fp}



static void Test_BFu7c_BFu7c_Ip()
{
  {
    init_simple_test("BFu7c_BFu7c_Ip");
    static STRUCT_IF_C BFu7c_BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_Ip, BFu7c_BFu7c_Ip)
//============================================================================


struct  BFu7c_BFu7c_L  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu7c_L) C1{ Fc:7 Fc:7 FL}



static void Test_BFu7c_BFu7c_L()
{
  {
    init_simple_test("BFu7c_BFu7c_L");
    static STRUCT_IF_C BFu7c_BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_L");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_L, BFu7c_BFu7c_L)
//============================================================================


struct  BFu7c_BFu7c_S  {
  unsigned char v1:7;
  unsigned char v2:7;
  short v3;
};
//SIG(1 BFu7c_BFu7c_S) C1{ Fc:7 Fc:7 Fs}



static void Test_BFu7c_BFu7c_S()
{
  {
    init_simple_test("BFu7c_BFu7c_S");
    static STRUCT_IF_C BFu7c_BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_S");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_S, BFu7c_BFu7c_S)
//============================================================================


struct  BFu7c_BFu7c_Uc  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu7c_Uc) C1{ Fc:7 Fc:7 Fc}



static void Test_BFu7c_BFu7c_Uc()
{
  {
    init_simple_test("BFu7c_BFu7c_Uc");
    static STRUCT_IF_C BFu7c_BFu7c_Uc lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu7c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_Uc, BFu7c_BFu7c_Uc)
//============================================================================


struct  BFu7c_BFu7c_Ui  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu7c_Ui) C1{ Fc:7 Fc:7 Fi}



static void Test_BFu7c_BFu7c_Ui()
{
  {
    init_simple_test("BFu7c_BFu7c_Ui");
    static STRUCT_IF_C BFu7c_BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_Ui, BFu7c_BFu7c_Ui)
//============================================================================


struct  BFu7c_BFu7c_Ul  {
  unsigned char v1:7;
  unsigned char v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu7c_Ul) C1{ Fc:7 Fc:7 FL}



static void Test_BFu7c_BFu7c_Ul()
{
  {
    init_simple_test("BFu7c_BFu7c_Ul");
    static STRUCT_IF_C BFu7c_BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_Ul, BFu7c_BFu7c_Ul)
//============================================================================


struct  BFu7c_BFu7c_Us  {
  unsigned char v1:7;
  unsigned char v2:7;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu7c_Us) C1{ Fc:7 Fc:7 Fs}



static void Test_BFu7c_BFu7c_Us()
{
  {
    init_simple_test("BFu7c_BFu7c_Us");
    static STRUCT_IF_C BFu7c_BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_Us");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_Us, BFu7c_BFu7c_Us)
//============================================================================


struct  BFu7c_BFu7c_Vp  {
  unsigned char v1:7;
  unsigned char v2:7;
  void *v3;
};
//SIG(1 BFu7c_BFu7c_Vp) C1{ Fc:7 Fc:7 Fp}



static void Test_BFu7c_BFu7c_Vp()
{
  {
    init_simple_test("BFu7c_BFu7c_Vp");
    static STRUCT_IF_C BFu7c_BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7c_BFu7c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7c_Vp, BFu7c_BFu7c_Vp)
//============================================================================


struct  BFu7c_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
};
//SIG(1 BFu7c_BFu7i) C1{ Fc:7 Fi:7}



static void Test_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i, BFu7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c) C1{ Fc:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c, BFu7c_BFu7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7c_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c_BFs7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c_BFs7c, BFu7c_BFu7i_BFs7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7c_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c_BFs7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c_BFs7i, BFu7c_BFu7i_BFs7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7c_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c_BFs7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c_BFs7ll, BFu7c_BFu7i_BFs7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7c_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c_BFs7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c_BFs7s, BFu7c_BFu7i_BFs7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFs7c_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c_BFu7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c_BFu7c, BFu7c_BFu7i_BFs7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7c_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c_BFu7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c_BFu7i, BFu7c_BFu7i_BFs7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7c_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c_BFu7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c_BFu7ll, BFu7c_BFu7i_BFs7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7c_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7c_BFu7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7c_BFu7s, BFu7c_BFu7i_BFs7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i, BFu7c_BFu7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7i_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i_BFs7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i_BFs7c, BFu7c_BFu7i_BFs7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7i_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i_BFs7i, BFu7c_BFu7i_BFs7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7i_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i_BFs7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i_BFs7ll, BFu7c_BFu7i_BFs7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7i_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i_BFs7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i_BFs7s, BFu7c_BFu7i_BFs7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFs7i_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i_BFu7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i_BFu7c, BFu7c_BFu7i_BFs7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7i_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i_BFu7i, BFu7c_BFu7i_BFs7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i_BFu7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i_BFu7ll, BFu7c_BFu7i_BFs7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7i_BFu7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7i_BFu7s, BFu7c_BFu7i_BFs7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll) C1{ Fc:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll, BFu7c_BFu7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll_BFs7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll_BFs7c, BFu7c_BFu7i_BFs7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll_BFs7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll_BFs7i, BFu7c_BFu7i_BFs7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll_BFs7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll_BFs7ll, BFu7c_BFu7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll_BFs7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll_BFs7s, BFu7c_BFu7i_BFs7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll_BFu7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll_BFu7c, BFu7c_BFu7i_BFs7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll_BFu7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll_BFu7i, BFu7c_BFu7i_BFs7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll_BFu7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll_BFu7ll, BFu7c_BFu7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7ll_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7ll_BFu7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7ll_BFu7s, BFu7c_BFu7i_BFs7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s) C1{ Fc:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s, BFu7c_BFu7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFs7s_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s_BFs7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s_BFs7c, BFu7c_BFu7i_BFs7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7s_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s_BFs7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s_BFs7i, BFu7c_BFu7i_BFs7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7s_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s_BFs7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s_BFs7ll, BFu7c_BFu7i_BFs7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7s_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s_BFs7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s_BFs7s, BFu7c_BFu7i_BFs7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFs7s_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s_BFu7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s_BFu7c, BFu7c_BFu7i_BFs7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFs7s_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s_BFu7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s_BFu7i, BFu7c_BFu7i_BFs7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFs7s_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s_BFu7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s_BFu7ll, BFu7c_BFu7i_BFs7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFs7s_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFs7s_BFu7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFs7s_BFu7s, BFu7c_BFu7i_BFs7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFu15i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu7i_BFu15i) C1{ Fc:7 Fi:7 Fi:15}



static void Test_BFu7c_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7c_BFu7i_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7c_BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu15i, BFu7c_BFu7i_BFu15i)
//============================================================================


struct  BFu7c_BFu7i_BFu15ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu7i_BFu15ll) C1{ Fc:7 Fi:7 FL:15}



static void Test_BFu7c_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7c_BFu7i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7c_BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu15ll, BFu7c_BFu7i_BFu15ll)
//============================================================================


struct  BFu7c_BFu7i_BFu15s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu7i_BFu15s) C1{ Fc:7 Fi:7 Fs:15}



static void Test_BFu7c_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu7i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu15s, BFu7c_BFu7i_BFu15s)
//============================================================================


struct  BFu7c_BFu7i_BFu16i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu7i_BFu16i) C1{ Fc:7 Fi:7 Fi:16}



static void Test_BFu7c_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7c_BFu7i_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu16i, BFu7c_BFu7i_BFu16i)
//============================================================================


struct  BFu7c_BFu7i_BFu16ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu7i_BFu16ll) C1{ Fc:7 Fi:7 FL:16}



static void Test_BFu7c_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7c_BFu7i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu16ll, BFu7c_BFu7i_BFu16ll)
//============================================================================


struct  BFu7c_BFu7i_BFu16s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu7i_BFu16s) C1{ Fc:7 Fi:7 Fs:16}



static void Test_BFu7c_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu7i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu16s, BFu7c_BFu7i_BFu16s)
//============================================================================


struct  BFu7c_BFu7i_BFu17i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu7i_BFu17i) C1{ Fc:7 Fi:7 Fi:17}



static void Test_BFu7c_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7c_BFu7i_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu17i, BFu7c_BFu7i_BFu17i)
//============================================================================


struct  BFu7c_BFu7i_BFu17ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu7i_BFu17ll) C1{ Fc:7 Fi:7 FL:17}



static void Test_BFu7c_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7c_BFu7i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu17ll, BFu7c_BFu7i_BFu17ll)
//============================================================================


struct  BFu7c_BFu7i_BFu1c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu7i_BFu1c) C1{ Fc:7 Fi:7 Fc:1}



static void Test_BFu7c_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu1c, BFu7c_BFu7i_BFu1c)
//============================================================================


struct  BFu7c_BFu7i_BFu1i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu7i_BFu1i) C1{ Fc:7 Fi:7 Fi:1}



static void Test_BFu7c_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu1i, BFu7c_BFu7i_BFu1i)
//============================================================================


struct  BFu7c_BFu7i_BFu1ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu7i_BFu1ll) C1{ Fc:7 Fi:7 FL:1}



static void Test_BFu7c_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu1ll, BFu7c_BFu7i_BFu1ll)
//============================================================================


struct  BFu7c_BFu7i_BFu1s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu7i_BFu1s) C1{ Fc:7 Fi:7 Fs:1}



static void Test_BFu7c_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu1s, BFu7c_BFu7i_BFu1s)
//============================================================================


struct  BFu7c_BFu7i_BFu31i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu7i_BFu31i) C1{ Fc:7 Fi:7 Fi:31}



static void Test_BFu7c_BFu7i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu7i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu7i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu31i, BFu7c_BFu7i_BFu31i)
//============================================================================


struct  BFu7c_BFu7i_BFu31ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu7i_BFu31ll) C1{ Fc:7 Fi:7 FL:31}



static void Test_BFu7c_BFu7i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7c_BFu7i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7c_BFu7i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu31ll, BFu7c_BFu7i_BFu31ll)
//============================================================================


struct  BFu7c_BFu7i_BFu32i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu7i_BFu32i) C1{ Fc:7 Fi:7 Fi:32}



static void Test_BFu7c_BFu7i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu7i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu7i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu32i, BFu7c_BFu7i_BFu32i)
//============================================================================


struct  BFu7c_BFu7i_BFu32ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu7i_BFu32ll) C1{ Fc:7 Fi:7 FL:32}



static void Test_BFu7c_BFu7i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7c_BFu7i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7c_BFu7i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu32ll, BFu7c_BFu7i_BFu32ll)
//============================================================================


struct  BFu7c_BFu7i_BFu33  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu7i_BFu33) C1{ Fc:7 Fi:7 FL:33}



static void Test_BFu7c_BFu7i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu33");
    static STRUCT_IF_C BFu7c_BFu7i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7c_BFu7i_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7c_BFu7i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu33, BFu7c_BFu7i_BFu33)
//============================================================================


struct  BFu7c_BFu7i_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c) C1{ Fc:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c, BFu7c_BFu7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7c_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c_BFs7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c_BFs7c, BFu7c_BFu7i_BFu7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7c_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c_BFs7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c_BFs7i, BFu7c_BFu7i_BFu7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7c_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c_BFs7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c_BFs7ll, BFu7c_BFu7i_BFu7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7c_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c_BFs7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c_BFs7s, BFu7c_BFu7i_BFu7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFu7c_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c_BFu7c) C1{ Fc:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c_BFu7c, BFu7c_BFu7i_BFu7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7c_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c_BFu7i) C1{ Fc:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c_BFu7i, BFu7c_BFu7i_BFu7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7c_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c_BFu7ll) C1{ Fc:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c_BFu7ll, BFu7c_BFu7i_BFu7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7c_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7c_BFu7s) C1{ Fc:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7c_BFu7s, BFu7c_BFu7i_BFu7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i, BFu7c_BFu7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7i_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i_BFs7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i_BFs7c, BFu7c_BFu7i_BFu7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7i_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i_BFs7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i_BFs7i, BFu7c_BFu7i_BFu7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7i_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i_BFs7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i_BFs7ll, BFu7c_BFu7i_BFu7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7i_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i_BFs7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i_BFs7s, BFu7c_BFu7i_BFu7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFu7i_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i_BFu7c) C1{ Fc:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i_BFu7c, BFu7c_BFu7i_BFu7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7i_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i_BFu7i) C1{ Fc:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i_BFu7i, BFu7c_BFu7i_BFu7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i_BFu7ll) C1{ Fc:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i_BFu7ll, BFu7c_BFu7i_BFu7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7i_BFu7s) C1{ Fc:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7i_BFu7s, BFu7c_BFu7i_BFu7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll) C1{ Fc:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll, BFu7c_BFu7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll_BFs7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll_BFs7c, BFu7c_BFu7i_BFu7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll_BFs7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll_BFs7i, BFu7c_BFu7i_BFu7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll_BFs7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll_BFs7ll, BFu7c_BFu7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll_BFs7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll_BFs7s, BFu7c_BFu7i_BFu7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll_BFu7c) C1{ Fc:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll_BFu7c, BFu7c_BFu7i_BFu7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll_BFu7i) C1{ Fc:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll_BFu7i, BFu7c_BFu7i_BFu7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll_BFu7ll) C1{ Fc:7 Fi:7 FL:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll_BFu7ll, BFu7c_BFu7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7ll_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7ll_BFu7s) C1{ Fc:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7ll_BFu7s, BFu7c_BFu7i_BFu7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s) C1{ Fc:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s, BFu7c_BFu7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFu7s_BFs7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s_BFs7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s_BFs7c, BFu7c_BFu7i_BFu7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7s_BFs7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s_BFs7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s_BFs7i, BFu7c_BFu7i_BFu7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7s_BFs7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s_BFs7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s_BFs7ll, BFu7c_BFu7i_BFu7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7s_BFs7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s_BFs7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s_BFs7s, BFu7c_BFu7i_BFu7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7i_BFu7s_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s_BFu7c) C1{ Fc:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s_BFu7c, BFu7c_BFu7i_BFu7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7i_BFu7s_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s_BFu7i) C1{ Fc:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s_BFu7i, BFu7c_BFu7i_BFu7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7i_BFu7s_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s_BFu7ll) C1{ Fc:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s_BFu7ll, BFu7c_BFu7i_BFu7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7i_BFu7s_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7i_BFu7s_BFu7s) C1{ Fc:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu7s_BFu7s, BFu7c_BFu7i_BFu7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7i_BFu8c  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu7i_BFu8c) C1{ Fc:7 Fi:7 Fc:8}



static void Test_BFu7c_BFu7i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu7i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu7i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu7i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu8c, BFu7c_BFu7i_BFu8c)
//============================================================================


struct  BFu7c_BFu7i_BFu8i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu7i_BFu8i) C1{ Fc:7 Fi:7 Fi:8}



static void Test_BFu7c_BFu7i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7c_BFu7i_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu7i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu8i, BFu7c_BFu7i_BFu8i)
//============================================================================


struct  BFu7c_BFu7i_BFu8ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu7i_BFu8ll) C1{ Fc:7 Fi:7 FL:8}



static void Test_BFu7c_BFu7i_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7c_BFu7i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu7i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu8ll, BFu7c_BFu7i_BFu8ll)
//============================================================================


struct  BFu7c_BFu7i_BFu8s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu7i_BFu8s) C1{ Fc:7 Fi:7 Fs:8}



static void Test_BFu7c_BFu7i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu7i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu7i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu8s, BFu7c_BFu7i_BFu8s)
//============================================================================


struct  BFu7c_BFu7i_BFu9i  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu7i_BFu9i) C1{ Fc:7 Fi:7 Fi:9}



static void Test_BFu7c_BFu7i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu7i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7c_BFu7i_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu7i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu9i, BFu7c_BFu7i_BFu9i)
//============================================================================


struct  BFu7c_BFu7i_BFu9ll  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu7i_BFu9ll) C1{ Fc:7 Fi:7 FL:9}



static void Test_BFu7c_BFu7i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu7i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7c_BFu7i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu7i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu9ll, BFu7c_BFu7i_BFu9ll)
//============================================================================


struct  BFu7c_BFu7i_BFu9s  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu7i_BFu9s) C1{ Fc:7 Fi:7 Fs:9}



static void Test_BFu7c_BFu7i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu7i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu7i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu7i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu7i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_BFu9s, BFu7c_BFu7i_BFu9s)
//============================================================================


struct  BFu7c_BFu7i_C  {
  unsigned char v1:7;
  unsigned int v2:7;
  char v3;
};
//SIG(1 BFu7c_BFu7i_C) C1{ Fc:7 Fi:7 Fc}



static void Test_BFu7c_BFu7i_C()
{
  {
    init_simple_test("BFu7c_BFu7i_C");
    static STRUCT_IF_C BFu7c_BFu7i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_C, BFu7c_BFu7i_C)
//============================================================================


struct  BFu7c_BFu7i_D  {
  unsigned char v1:7;
  unsigned int v2:7;
  double v3;
};
//SIG(1 BFu7c_BFu7i_D) C1{ Fc:7 Fi:7 FL}



static void Test_BFu7c_BFu7i_D()
{
  {
    init_simple_test("BFu7c_BFu7i_D");
    static STRUCT_IF_C BFu7c_BFu7i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_D, BFu7c_BFu7i_D)
//============================================================================


struct  BFu7c_BFu7i_F  {
  unsigned char v1:7;
  unsigned int v2:7;
  float v3;
};
//SIG(1 BFu7c_BFu7i_F) C1{ Fc:7 Fi:7 Fi}



static void Test_BFu7c_BFu7i_F()
{
  {
    init_simple_test("BFu7c_BFu7i_F");
    static STRUCT_IF_C BFu7c_BFu7i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_F, BFu7c_BFu7i_F)
//============================================================================


struct  BFu7c_BFu7i_I  {
  unsigned char v1:7;
  unsigned int v2:7;
  int v3;
};
//SIG(1 BFu7c_BFu7i_I) C1{ Fc:7 Fi:7 Fi}



static void Test_BFu7c_BFu7i_I()
{
  {
    init_simple_test("BFu7c_BFu7i_I");
    static STRUCT_IF_C BFu7c_BFu7i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_I, BFu7c_BFu7i_I)
//============================================================================


struct  BFu7c_BFu7i_Ip  {
  unsigned char v1:7;
  unsigned int v2:7;
  int *v3;
};
//SIG(1 BFu7c_BFu7i_Ip) C1{ Fc:7 Fi:7 Fp}



static void Test_BFu7c_BFu7i_Ip()
{
  {
    init_simple_test("BFu7c_BFu7i_Ip");
    static STRUCT_IF_C BFu7c_BFu7i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu7i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_Ip, BFu7c_BFu7i_Ip)
//============================================================================


struct  BFu7c_BFu7i_L  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu7i_L) C1{ Fc:7 Fi:7 FL}



static void Test_BFu7c_BFu7i_L()
{
  {
    init_simple_test("BFu7c_BFu7i_L");
    static STRUCT_IF_C BFu7c_BFu7i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_L, BFu7c_BFu7i_L)
//============================================================================


struct  BFu7c_BFu7i_S  {
  unsigned char v1:7;
  unsigned int v2:7;
  short v3;
};
//SIG(1 BFu7c_BFu7i_S) C1{ Fc:7 Fi:7 Fs}



static void Test_BFu7c_BFu7i_S()
{
  {
    init_simple_test("BFu7c_BFu7i_S");
    static STRUCT_IF_C BFu7c_BFu7i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_S, BFu7c_BFu7i_S)
//============================================================================


struct  BFu7c_BFu7i_Uc  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu7i_Uc) C1{ Fc:7 Fi:7 Fc}



static void Test_BFu7c_BFu7i_Uc()
{
  {
    init_simple_test("BFu7c_BFu7i_Uc");
    static STRUCT_IF_C BFu7c_BFu7i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_Uc, BFu7c_BFu7i_Uc)
//============================================================================


struct  BFu7c_BFu7i_Ui  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu7i_Ui) C1{ Fc:7 Fi:7 Fi}



static void Test_BFu7c_BFu7i_Ui()
{
  {
    init_simple_test("BFu7c_BFu7i_Ui");
    static STRUCT_IF_C BFu7c_BFu7i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_Ui, BFu7c_BFu7i_Ui)
//============================================================================


struct  BFu7c_BFu7i_Ul  {
  unsigned char v1:7;
  unsigned int v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu7i_Ul) C1{ Fc:7 Fi:7 FL}



static void Test_BFu7c_BFu7i_Ul()
{
  {
    init_simple_test("BFu7c_BFu7i_Ul");
    static STRUCT_IF_C BFu7c_BFu7i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_Ul, BFu7c_BFu7i_Ul)
//============================================================================


struct  BFu7c_BFu7i_Us  {
  unsigned char v1:7;
  unsigned int v2:7;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu7i_Us) C1{ Fc:7 Fi:7 Fs}



static void Test_BFu7c_BFu7i_Us()
{
  {
    init_simple_test("BFu7c_BFu7i_Us");
    static STRUCT_IF_C BFu7c_BFu7i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_Us, BFu7c_BFu7i_Us)
//============================================================================


struct  BFu7c_BFu7i_Vp  {
  unsigned char v1:7;
  unsigned int v2:7;
  void *v3;
};
//SIG(1 BFu7c_BFu7i_Vp) C1{ Fc:7 Fi:7 Fp}



static void Test_BFu7c_BFu7i_Vp()
{
  {
    init_simple_test("BFu7c_BFu7i_Vp");
    static STRUCT_IF_C BFu7c_BFu7i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu7i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7i_Vp, BFu7c_BFu7i_Vp)
//============================================================================


struct  BFu7c_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
};
//SIG(1 BFu7c_BFu7ll) C1{ Fc:7 FL:7}



static void Test_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll, BFu7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c) C1{ Fc:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c, BFu7c_BFu7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c_BFs7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c_BFs7c, BFu7c_BFu7ll_BFs7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c_BFs7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c_BFs7i, BFu7c_BFu7ll_BFs7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c_BFs7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c_BFs7ll, BFu7c_BFu7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c_BFs7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c_BFs7s, BFu7c_BFu7ll_BFs7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c_BFu7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c_BFu7c, BFu7c_BFu7ll_BFs7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c_BFu7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c_BFu7i, BFu7c_BFu7ll_BFs7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c_BFu7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c_BFu7ll, BFu7c_BFu7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7c_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7c_BFu7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7c_BFu7s, BFu7c_BFu7ll_BFs7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i) C1{ Fc:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i, BFu7c_BFu7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i_BFs7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i_BFs7c, BFu7c_BFu7ll_BFs7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i_BFs7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i_BFs7i, BFu7c_BFu7ll_BFs7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i_BFs7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i_BFs7ll, BFu7c_BFu7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i_BFs7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i_BFs7s, BFu7c_BFu7ll_BFs7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i_BFu7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i_BFu7c, BFu7c_BFu7ll_BFs7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i_BFu7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i_BFu7i, BFu7c_BFu7ll_BFs7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i_BFu7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i_BFu7ll, BFu7c_BFu7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7i_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7i_BFu7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7i_BFu7s, BFu7c_BFu7ll_BFs7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll, BFu7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll_BFs7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll_BFs7c, BFu7c_BFu7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll_BFs7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll_BFs7i, BFu7c_BFu7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll_BFs7ll, BFu7c_BFu7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll_BFs7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll_BFs7s, BFu7c_BFu7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll_BFu7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll_BFu7c, BFu7c_BFu7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll_BFu7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll_BFu7i, BFu7c_BFu7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll_BFu7ll, BFu7c_BFu7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7ll_BFu7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7ll_BFu7s, BFu7c_BFu7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s) C1{ Fc:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s, BFu7c_BFu7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s_BFs7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s_BFs7c, BFu7c_BFu7ll_BFs7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s_BFs7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s_BFs7i, BFu7c_BFu7ll_BFs7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s_BFs7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s_BFs7ll, BFu7c_BFu7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s_BFs7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s_BFs7s, BFu7c_BFu7ll_BFs7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s_BFu7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s_BFu7c, BFu7c_BFu7ll_BFs7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s_BFu7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s_BFu7i, BFu7c_BFu7ll_BFs7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s_BFu7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s_BFu7ll, BFu7c_BFu7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFs7s_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFs7s_BFu7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFs7s_BFu7s, BFu7c_BFu7ll_BFs7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu15i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu7ll_BFu15i) C1{ Fc:7 FL:7 Fi:15}



static void Test_BFu7c_BFu7ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7c_BFu7ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7c_BFu7ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu15i, BFu7c_BFu7ll_BFu15i)
//============================================================================


struct  BFu7c_BFu7ll_BFu15ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu7ll_BFu15ll) C1{ Fc:7 FL:7 FL:15}



static void Test_BFu7c_BFu7ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7c_BFu7ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7c_BFu7ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu15ll, BFu7c_BFu7ll_BFu15ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu15s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu7ll_BFu15s) C1{ Fc:7 FL:7 Fs:15}



static void Test_BFu7c_BFu7ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu7ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu7ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu15s, BFu7c_BFu7ll_BFu15s)
//============================================================================


struct  BFu7c_BFu7ll_BFu16i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu7ll_BFu16i) C1{ Fc:7 FL:7 Fi:16}



static void Test_BFu7c_BFu7ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7c_BFu7ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu7ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu16i, BFu7c_BFu7ll_BFu16i)
//============================================================================


struct  BFu7c_BFu7ll_BFu16ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu7ll_BFu16ll) C1{ Fc:7 FL:7 FL:16}



static void Test_BFu7c_BFu7ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7c_BFu7ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu7ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu16ll, BFu7c_BFu7ll_BFu16ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu16s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu7ll_BFu16s) C1{ Fc:7 FL:7 Fs:16}



static void Test_BFu7c_BFu7ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu7ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu7ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu16s, BFu7c_BFu7ll_BFu16s)
//============================================================================


struct  BFu7c_BFu7ll_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu7ll_BFu17i) C1{ Fc:7 FL:7 Fi:17}



static void Test_BFu7c_BFu7ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7c_BFu7ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu7ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu17i, BFu7c_BFu7ll_BFu17i)
//============================================================================


struct  BFu7c_BFu7ll_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu7ll_BFu17ll) C1{ Fc:7 FL:7 FL:17}



static void Test_BFu7c_BFu7ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7c_BFu7ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu7ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu17ll, BFu7c_BFu7ll_BFu17ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu1c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu7ll_BFu1c) C1{ Fc:7 FL:7 Fc:1}



static void Test_BFu7c_BFu7ll_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu1c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu1c, BFu7c_BFu7ll_BFu1c)
//============================================================================


struct  BFu7c_BFu7ll_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu7ll_BFu1i) C1{ Fc:7 FL:7 Fi:1}



static void Test_BFu7c_BFu7ll_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu1i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu1i, BFu7c_BFu7ll_BFu1i)
//============================================================================


struct  BFu7c_BFu7ll_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu7ll_BFu1ll) C1{ Fc:7 FL:7 FL:1}



static void Test_BFu7c_BFu7ll_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu1ll, BFu7c_BFu7ll_BFu1ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu7ll_BFu1s) C1{ Fc:7 FL:7 Fs:1}



static void Test_BFu7c_BFu7ll_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu1s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu1s, BFu7c_BFu7ll_BFu1s)
//============================================================================


struct  BFu7c_BFu7ll_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu7ll_BFu31i) C1{ Fc:7 FL:7 Fi:31}



static void Test_BFu7c_BFu7ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu7ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu7ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu31i, BFu7c_BFu7ll_BFu31i)
//============================================================================


struct  BFu7c_BFu7ll_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu7ll_BFu31ll) C1{ Fc:7 FL:7 FL:31}



static void Test_BFu7c_BFu7ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7c_BFu7ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7c_BFu7ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu31ll, BFu7c_BFu7ll_BFu31ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu7ll_BFu32i) C1{ Fc:7 FL:7 Fi:32}



static void Test_BFu7c_BFu7ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu7ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu7ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu32i, BFu7c_BFu7ll_BFu32i)
//============================================================================


struct  BFu7c_BFu7ll_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu7ll_BFu32ll) C1{ Fc:7 FL:7 FL:32}



static void Test_BFu7c_BFu7ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7c_BFu7ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7c_BFu7ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu32ll, BFu7c_BFu7ll_BFu32ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu33  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu7ll_BFu33) C1{ Fc:7 FL:7 FL:33}



static void Test_BFu7c_BFu7ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7c_BFu7ll_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7c_BFu7ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu33, BFu7c_BFu7ll_BFu33)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c) C1{ Fc:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c, BFu7c_BFu7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c_BFs7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c_BFs7c, BFu7c_BFu7ll_BFu7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c_BFs7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c_BFs7i, BFu7c_BFu7ll_BFu7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c_BFs7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c_BFs7ll, BFu7c_BFu7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c_BFs7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c_BFs7s, BFu7c_BFu7ll_BFu7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c_BFu7c) C1{ Fc:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c_BFu7c, BFu7c_BFu7ll_BFu7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c_BFu7i) C1{ Fc:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c_BFu7i, BFu7c_BFu7ll_BFu7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c_BFu7ll) C1{ Fc:7 FL:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c_BFu7ll, BFu7c_BFu7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7c_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7c_BFu7s) C1{ Fc:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7c_BFu7s, BFu7c_BFu7ll_BFu7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i) C1{ Fc:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i, BFu7c_BFu7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i_BFs7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i_BFs7c, BFu7c_BFu7ll_BFu7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i_BFs7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i_BFs7i, BFu7c_BFu7ll_BFu7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i_BFs7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i_BFs7ll, BFu7c_BFu7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i_BFs7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i_BFs7s, BFu7c_BFu7ll_BFu7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i_BFu7c) C1{ Fc:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i_BFu7c, BFu7c_BFu7ll_BFu7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i_BFu7i) C1{ Fc:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i_BFu7i, BFu7c_BFu7ll_BFu7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i_BFu7ll) C1{ Fc:7 FL:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i_BFu7ll, BFu7c_BFu7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7i_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7i_BFu7s) C1{ Fc:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7i_BFu7s, BFu7c_BFu7ll_BFu7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll, BFu7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll_BFs7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll_BFs7c, BFu7c_BFu7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll_BFs7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll_BFs7i, BFu7c_BFu7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll_BFs7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll_BFs7ll, BFu7c_BFu7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll_BFs7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll_BFs7s, BFu7c_BFu7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll_BFu7c) C1{ Fc:7 FL:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll_BFu7c, BFu7c_BFu7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll_BFu7i) C1{ Fc:7 FL:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll_BFu7i, BFu7c_BFu7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll_BFu7ll) C1{ Fc:7 FL:7 FL:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll_BFu7ll, BFu7c_BFu7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7ll_BFu7s) C1{ Fc:7 FL:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7ll_BFu7s, BFu7c_BFu7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s) C1{ Fc:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s, BFu7c_BFu7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s_BFs7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s_BFs7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s_BFs7c, BFu7c_BFu7ll_BFu7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s_BFs7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s_BFs7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s_BFs7i, BFu7c_BFu7ll_BFu7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s_BFs7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s_BFs7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s_BFs7ll, BFu7c_BFu7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s_BFs7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s_BFs7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s_BFs7s, BFu7c_BFu7ll_BFu7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s_BFu7c) C1{ Fc:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s_BFu7c, BFu7c_BFu7ll_BFu7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s_BFu7i) C1{ Fc:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s_BFu7i, BFu7c_BFu7ll_BFu7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s_BFu7ll) C1{ Fc:7 FL:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s_BFu7ll, BFu7c_BFu7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu7s_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7ll_BFu7s_BFu7s) C1{ Fc:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu7s_BFu7s, BFu7c_BFu7ll_BFu7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7ll_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu7ll_BFu8c) C1{ Fc:7 FL:7 Fc:8}



static void Test_BFu7c_BFu7ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu7ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu7ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu8c, BFu7c_BFu7ll_BFu8c)
//============================================================================


struct  BFu7c_BFu7ll_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu7ll_BFu8i) C1{ Fc:7 FL:7 Fi:8}



static void Test_BFu7c_BFu7ll_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu8i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7c_BFu7ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu7ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu8i, BFu7c_BFu7ll_BFu8i)
//============================================================================


struct  BFu7c_BFu7ll_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu7ll_BFu8ll) C1{ Fc:7 FL:7 FL:8}



static void Test_BFu7c_BFu7ll_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7c_BFu7ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu7ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu8ll, BFu7c_BFu7ll_BFu8ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu7ll_BFu8s) C1{ Fc:7 FL:7 Fs:8}



static void Test_BFu7c_BFu7ll_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu8s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu7ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu7ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu8s, BFu7c_BFu7ll_BFu8s)
//============================================================================


struct  BFu7c_BFu7ll_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu7ll_BFu9i) C1{ Fc:7 FL:7 Fi:9}



static void Test_BFu7c_BFu7ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7c_BFu7ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu7ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu9i, BFu7c_BFu7ll_BFu9i)
//============================================================================


struct  BFu7c_BFu7ll_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu7ll_BFu9ll) C1{ Fc:7 FL:7 FL:9}



static void Test_BFu7c_BFu7ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7c_BFu7ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu7ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu9ll, BFu7c_BFu7ll_BFu9ll)
//============================================================================


struct  BFu7c_BFu7ll_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu7ll_BFu9s) C1{ Fc:7 FL:7 Fs:9}



static void Test_BFu7c_BFu7ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu7ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu7ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu7ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu7ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_BFu9s, BFu7c_BFu7ll_BFu9s)
//============================================================================


struct  BFu7c_BFu7ll_C  {
  unsigned char v1:7;
  __tsu64 v2:7;
  char v3;
};
//SIG(1 BFu7c_BFu7ll_C) C1{ Fc:7 FL:7 Fc}



static void Test_BFu7c_BFu7ll_C()
{
  {
    init_simple_test("BFu7c_BFu7ll_C");
    static STRUCT_IF_C BFu7c_BFu7ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_C, BFu7c_BFu7ll_C)
//============================================================================


struct  BFu7c_BFu7ll_D  {
  unsigned char v1:7;
  __tsu64 v2:7;
  double v3;
};
//SIG(1 BFu7c_BFu7ll_D) C1{ Fc:7 FL:7 FL}



static void Test_BFu7c_BFu7ll_D()
{
  {
    init_simple_test("BFu7c_BFu7ll_D");
    static STRUCT_IF_C BFu7c_BFu7ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_D, BFu7c_BFu7ll_D)
//============================================================================


struct  BFu7c_BFu7ll_F  {
  unsigned char v1:7;
  __tsu64 v2:7;
  float v3;
};
//SIG(1 BFu7c_BFu7ll_F) C1{ Fc:7 FL:7 Fi}



static void Test_BFu7c_BFu7ll_F()
{
  {
    init_simple_test("BFu7c_BFu7ll_F");
    static STRUCT_IF_C BFu7c_BFu7ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_F, BFu7c_BFu7ll_F)
//============================================================================


struct  BFu7c_BFu7ll_I  {
  unsigned char v1:7;
  __tsu64 v2:7;
  int v3;
};
//SIG(1 BFu7c_BFu7ll_I) C1{ Fc:7 FL:7 Fi}



static void Test_BFu7c_BFu7ll_I()
{
  {
    init_simple_test("BFu7c_BFu7ll_I");
    static STRUCT_IF_C BFu7c_BFu7ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_I, BFu7c_BFu7ll_I)
//============================================================================


struct  BFu7c_BFu7ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:7;
  int *v3;
};
//SIG(1 BFu7c_BFu7ll_Ip) C1{ Fc:7 FL:7 Fp}



static void Test_BFu7c_BFu7ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu7ll_Ip");
    static STRUCT_IF_C BFu7c_BFu7ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu7ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_Ip, BFu7c_BFu7ll_Ip)
//============================================================================


struct  BFu7c_BFu7ll_L  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu7ll_L) C1{ Fc:7 FL:7 FL}



static void Test_BFu7c_BFu7ll_L()
{
  {
    init_simple_test("BFu7c_BFu7ll_L");
    static STRUCT_IF_C BFu7c_BFu7ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_L, BFu7c_BFu7ll_L)
//============================================================================


struct  BFu7c_BFu7ll_S  {
  unsigned char v1:7;
  __tsu64 v2:7;
  short v3;
};
//SIG(1 BFu7c_BFu7ll_S) C1{ Fc:7 FL:7 Fs}



static void Test_BFu7c_BFu7ll_S()
{
  {
    init_simple_test("BFu7c_BFu7ll_S");
    static STRUCT_IF_C BFu7c_BFu7ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_S, BFu7c_BFu7ll_S)
//============================================================================


struct  BFu7c_BFu7ll_Uc  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu7ll_Uc) C1{ Fc:7 FL:7 Fc}



static void Test_BFu7c_BFu7ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu7ll_Uc");
    static STRUCT_IF_C BFu7c_BFu7ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_Uc, BFu7c_BFu7ll_Uc)
//============================================================================


struct  BFu7c_BFu7ll_Ui  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu7ll_Ui) C1{ Fc:7 FL:7 Fi}



static void Test_BFu7c_BFu7ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu7ll_Ui");
    static STRUCT_IF_C BFu7c_BFu7ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_Ui, BFu7c_BFu7ll_Ui)
//============================================================================


struct  BFu7c_BFu7ll_Ul  {
  unsigned char v1:7;
  __tsu64 v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu7ll_Ul) C1{ Fc:7 FL:7 FL}



static void Test_BFu7c_BFu7ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu7ll_Ul");
    static STRUCT_IF_C BFu7c_BFu7ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_Ul, BFu7c_BFu7ll_Ul)
//============================================================================


struct  BFu7c_BFu7ll_Us  {
  unsigned char v1:7;
  __tsu64 v2:7;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu7ll_Us) C1{ Fc:7 FL:7 Fs}



static void Test_BFu7c_BFu7ll_Us()
{
  {
    init_simple_test("BFu7c_BFu7ll_Us");
    static STRUCT_IF_C BFu7c_BFu7ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_Us, BFu7c_BFu7ll_Us)
//============================================================================


struct  BFu7c_BFu7ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:7;
  void *v3;
};
//SIG(1 BFu7c_BFu7ll_Vp) C1{ Fc:7 FL:7 Fp}



static void Test_BFu7c_BFu7ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu7ll_Vp");
    static STRUCT_IF_C BFu7c_BFu7ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu7ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7ll_Vp, BFu7c_BFu7ll_Vp)
//============================================================================


struct  BFu7c_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
};
//SIG(1 BFu7c_BFu7s) C1{ Fc:7 Fs:7}



static void Test_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s, BFu7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c) C1{ Fc:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c, BFu7c_BFu7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7c_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c_BFs7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c_BFs7c, BFu7c_BFu7s_BFs7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7c_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c_BFs7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c_BFs7i, BFu7c_BFu7s_BFs7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7c_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c_BFs7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c_BFs7ll, BFu7c_BFu7s_BFs7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7c_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c_BFs7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c_BFs7s, BFu7c_BFu7s_BFs7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7c_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c_BFu7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c_BFu7c, BFu7c_BFu7s_BFs7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7c_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c_BFu7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c_BFu7i, BFu7c_BFu7s_BFs7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7c_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c_BFu7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c_BFu7ll, BFu7c_BFu7s_BFs7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7c_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7c_BFu7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7c_BFu7s, BFu7c_BFu7s_BFs7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i) C1{ Fc:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i, BFu7c_BFu7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7i_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i_BFs7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i_BFs7c, BFu7c_BFu7s_BFs7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7i_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i_BFs7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i_BFs7i, BFu7c_BFu7s_BFs7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7i_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i_BFs7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i_BFs7ll, BFu7c_BFu7s_BFs7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7i_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i_BFs7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i_BFs7s, BFu7c_BFu7s_BFs7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7i_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i_BFu7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i_BFu7c, BFu7c_BFu7s_BFs7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7i_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i_BFu7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i_BFu7i, BFu7c_BFu7s_BFs7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7i_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i_BFu7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i_BFu7ll, BFu7c_BFu7s_BFs7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7i_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7i_BFu7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7i_BFu7s, BFu7c_BFu7s_BFs7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll) C1{ Fc:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll, BFu7c_BFu7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll_BFs7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll_BFs7c, BFu7c_BFu7s_BFs7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll_BFs7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll_BFs7i, BFu7c_BFu7s_BFs7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll_BFs7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll_BFs7ll, BFu7c_BFu7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll_BFs7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll_BFs7s, BFu7c_BFu7s_BFs7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll_BFu7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll_BFu7c, BFu7c_BFu7s_BFs7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll_BFu7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll_BFu7i, BFu7c_BFu7s_BFs7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll_BFu7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll_BFu7ll, BFu7c_BFu7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7ll_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7ll_BFu7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7ll_BFu7s, BFu7c_BFu7s_BFs7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s, BFu7c_BFu7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7s_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s_BFs7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s_BFs7c, BFu7c_BFu7s_BFs7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7s_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s_BFs7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s_BFs7i, BFu7c_BFu7s_BFs7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7s_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s_BFs7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s_BFs7ll, BFu7c_BFu7s_BFs7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7s_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s_BFs7s, BFu7c_BFu7s_BFs7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFs7s_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s_BFu7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s_BFu7c, BFu7c_BFu7s_BFs7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFs7s_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s_BFu7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s_BFu7i, BFu7c_BFu7s_BFs7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFs7s_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s_BFu7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s_BFu7ll, BFu7c_BFu7s_BFs7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFs7s_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFs7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFs7s_BFu7s, BFu7c_BFu7s_BFs7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFu15i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu7s_BFu15i) C1{ Fc:7 Fs:7 Fi:15}



static void Test_BFu7c_BFu7s_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu15i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7c_BFu7s_BFu15i");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7c_BFu7s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu15i, BFu7c_BFu7s_BFu15i)
//============================================================================


struct  BFu7c_BFu7s_BFu15ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu7s_BFu15ll) C1{ Fc:7 Fs:7 FL:15}



static void Test_BFu7c_BFu7s_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, 1, "BFu7c_BFu7s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 6, 15, hide_ull(1LL<<14), "BFu7c_BFu7s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu15ll, BFu7c_BFu7s_BFu15ll)
//============================================================================


struct  BFu7c_BFu7s_BFu15s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu7s_BFu15s) C1{ Fc:7 Fs:7 Fs:15}



static void Test_BFu7c_BFu7s_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu15s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu7s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu7s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu15s, BFu7c_BFu7s_BFu15s)
//============================================================================


struct  BFu7c_BFu7s_BFu16i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu7s_BFu16i) C1{ Fc:7 Fs:7 Fi:16}



static void Test_BFu7c_BFu7s_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu16i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7c_BFu7s_BFu16i");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu7s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu16i, BFu7c_BFu7s_BFu16i)
//============================================================================


struct  BFu7c_BFu7s_BFu16ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu7s_BFu16ll) C1{ Fc:7 Fs:7 FL:16}



static void Test_BFu7c_BFu7s_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, 1, "BFu7c_BFu7s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 6, 16, hide_ull(1LL<<15), "BFu7c_BFu7s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu16ll, BFu7c_BFu7s_BFu16ll)
//============================================================================


struct  BFu7c_BFu7s_BFu16s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu7s_BFu16s) C1{ Fc:7 Fs:7 Fs:16}



static void Test_BFu7c_BFu7s_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu16s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu7s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu7s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu16s, BFu7c_BFu7s_BFu16s)
//============================================================================


struct  BFu7c_BFu7s_BFu17i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu7s_BFu17i) C1{ Fc:7 Fs:7 Fi:17}



static void Test_BFu7c_BFu7s_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu17i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7c_BFu7s_BFu17i");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu7s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu17i, BFu7c_BFu7s_BFu17i)
//============================================================================


struct  BFu7c_BFu7s_BFu17ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu7s_BFu17ll) C1{ Fc:7 Fs:7 FL:17}



static void Test_BFu7c_BFu7s_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, 1, "BFu7c_BFu7s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 6, 17, hide_ull(1LL<<16), "BFu7c_BFu7s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu17ll, BFu7c_BFu7s_BFu17ll)
//============================================================================


struct  BFu7c_BFu7s_BFu1c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu7s_BFu1c) C1{ Fc:7 Fs:7 Fc:1}



static void Test_BFu7c_BFu7s_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu1c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu1c");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu1c, BFu7c_BFu7s_BFu1c)
//============================================================================


struct  BFu7c_BFu7s_BFu1i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu7s_BFu1i) C1{ Fc:7 Fs:7 Fi:1}



static void Test_BFu7c_BFu7s_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu1i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu1i");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu1i, BFu7c_BFu7s_BFu1i)
//============================================================================


struct  BFu7c_BFu7s_BFu1ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu7s_BFu1ll) C1{ Fc:7 Fs:7 FL:1}



static void Test_BFu7c_BFu7s_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu1ll, BFu7c_BFu7s_BFu1ll)
//============================================================================


struct  BFu7c_BFu7s_BFu1s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu7s_BFu1s) C1{ Fc:7 Fs:7 Fs:1}



static void Test_BFu7c_BFu7s_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu1s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu7s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu1s");
    set_bf_and_test(lv, v3, 1, 6, 1, 1, "BFu7c_BFu7s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu1s, BFu7c_BFu7s_BFu1s)
//============================================================================


struct  BFu7c_BFu7s_BFu31i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu7s_BFu31i) C1{ Fc:7 Fs:7 Fi:31}



static void Test_BFu7c_BFu7s_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu31i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu7s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu7s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu31i, BFu7c_BFu7s_BFu31i)
//============================================================================


struct  BFu7c_BFu7s_BFu31ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu7s_BFu31ll) C1{ Fc:7 Fs:7 FL:31}



static void Test_BFu7c_BFu7s_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, 1, "BFu7c_BFu7s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 6, 31, hide_ull(1LL<<30), "BFu7c_BFu7s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu31ll, BFu7c_BFu7s_BFu31ll)
//============================================================================


struct  BFu7c_BFu7s_BFu32i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu7s_BFu32i) C1{ Fc:7 Fs:7 Fi:32}



static void Test_BFu7c_BFu7s_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu32i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu7s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu7s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu32i, BFu7c_BFu7s_BFu32i)
//============================================================================


struct  BFu7c_BFu7s_BFu32ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu7s_BFu32ll) C1{ Fc:7 Fs:7 FL:32}



static void Test_BFu7c_BFu7s_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, 1, "BFu7c_BFu7s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 6, 32, hide_ull(1LL<<31), "BFu7c_BFu7s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu32ll, BFu7c_BFu7s_BFu32ll)
//============================================================================


struct  BFu7c_BFu7s_BFu33  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu7s_BFu33) C1{ Fc:7 Fs:7 FL:33}



static void Test_BFu7c_BFu7s_BFu33()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu33");
    static STRUCT_IF_C BFu7c_BFu7s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, 1, "BFu7c_BFu7s_BFu33");
    set_bf_and_test(lv, v3, 1, 6, 33, hide_ull(1LL<<32), "BFu7c_BFu7s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu33, BFu7c_BFu7s_BFu33)
//============================================================================


struct  BFu7c_BFu7s_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c) C1{ Fc:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c, BFu7c_BFu7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7c_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c_BFs7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c_BFs7c, BFu7c_BFu7s_BFu7c_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7c_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c_BFs7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c_BFs7i, BFu7c_BFu7s_BFu7c_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7c_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c_BFs7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c_BFs7ll, BFu7c_BFu7s_BFu7c_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7c_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c_BFs7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c_BFs7s, BFu7c_BFu7s_BFu7c_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFu7c_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c_BFu7c) C1{ Fc:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c_BFu7c, BFu7c_BFu7s_BFu7c_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7c_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c_BFu7i) C1{ Fc:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c_BFu7i, BFu7c_BFu7s_BFu7c_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7c_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c_BFu7ll) C1{ Fc:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c_BFu7ll, BFu7c_BFu7s_BFu7c_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7c_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7c_BFu7s) C1{ Fc:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7c_BFu7s, BFu7c_BFu7s_BFu7c_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i) C1{ Fc:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i, BFu7c_BFu7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7i_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i_BFs7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i_BFs7c, BFu7c_BFu7s_BFu7i_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7i_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i_BFs7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i_BFs7i, BFu7c_BFu7s_BFu7i_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7i_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i_BFs7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i_BFs7ll, BFu7c_BFu7s_BFu7i_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7i_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i_BFs7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i_BFs7s, BFu7c_BFu7s_BFu7i_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFu7i_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i_BFu7c) C1{ Fc:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i_BFu7c, BFu7c_BFu7s_BFu7i_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7i_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i_BFu7i) C1{ Fc:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i_BFu7i, BFu7c_BFu7s_BFu7i_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7i_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i_BFu7ll) C1{ Fc:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i_BFu7ll, BFu7c_BFu7s_BFu7i_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7i_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7i_BFu7s) C1{ Fc:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7i_BFu7s, BFu7c_BFu7s_BFu7i_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll) C1{ Fc:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll, BFu7c_BFu7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll_BFs7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll_BFs7c, BFu7c_BFu7s_BFu7ll_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll_BFs7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll_BFs7i, BFu7c_BFu7s_BFu7ll_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll_BFs7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll_BFs7ll, BFu7c_BFu7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll_BFs7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll_BFs7s, BFu7c_BFu7s_BFu7ll_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll_BFu7c) C1{ Fc:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll_BFu7c, BFu7c_BFu7s_BFu7ll_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll_BFu7i) C1{ Fc:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll_BFu7i, BFu7c_BFu7s_BFu7ll_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll_BFu7ll) C1{ Fc:7 Fs:7 FL:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll_BFu7ll, BFu7c_BFu7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7ll_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7ll_BFu7s) C1{ Fc:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7c_BFu7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7ll_BFu7s, BFu7c_BFu7s_BFu7ll_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s, BFu7c_BFu7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFu7s_BFs7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s_BFs7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s_BFs7c, BFu7c_BFu7s_BFu7s_BFs7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7s_BFs7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s_BFs7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s_BFs7i, BFu7c_BFu7s_BFu7s_BFs7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7s_BFs7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s_BFs7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s_BFs7ll, BFu7c_BFu7s_BFu7s_BFs7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7s_BFs7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s_BFs7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7c_BFu7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s_BFs7s, BFu7c_BFu7s_BFu7s_BFs7s)
//============================================================================


struct  BFu7c_BFu7s_BFu7s_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s_BFu7c) C1{ Fc:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7c_BFu7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s_BFu7c, BFu7c_BFu7s_BFu7s_BFu7c)
//============================================================================


struct  BFu7c_BFu7s_BFu7s_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s_BFu7i) C1{ Fc:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7c_BFu7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s_BFu7i, BFu7c_BFu7s_BFu7s_BFu7i)
//============================================================================


struct  BFu7c_BFu7s_BFu7s_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s_BFu7ll) C1{ Fc:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7c_BFu7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s_BFu7ll, BFu7c_BFu7s_BFu7s_BFu7ll)
//============================================================================


struct  BFu7c_BFu7s_BFu7s_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7c_BFu7s_BFu7s_BFu7s) C1{ Fc:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7c_BFu7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7c_BFu7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu7s_BFu7s, BFu7c_BFu7s_BFu7s_BFu7s)
//============================================================================


struct  BFu7c_BFu7s_BFu8c  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu7s_BFu8c) C1{ Fc:7 Fs:7 Fc:8}



static void Test_BFu7c_BFu7s_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu8c");
    static STRUCT_IF_C BFu7c_BFu7s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu7s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu7s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu8c, BFu7c_BFu7s_BFu8c)
//============================================================================


struct  BFu7c_BFu7s_BFu8i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu7s_BFu8i) C1{ Fc:7 Fs:7 Fi:8}



static void Test_BFu7c_BFu7s_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu8i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7c_BFu7s_BFu8i");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu7s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu8i, BFu7c_BFu7s_BFu8i)
//============================================================================


struct  BFu7c_BFu7s_BFu8ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu7s_BFu8ll) C1{ Fc:7 Fs:7 FL:8}



static void Test_BFu7c_BFu7s_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, 1, "BFu7c_BFu7s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 6, 8, hide_ull(1LL<<7), "BFu7c_BFu7s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu8ll, BFu7c_BFu7s_BFu8ll)
//============================================================================


struct  BFu7c_BFu7s_BFu8s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu7s_BFu8s) C1{ Fc:7 Fs:7 Fs:8}



static void Test_BFu7c_BFu7s_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu8s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu7s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu7s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu8s, BFu7c_BFu7s_BFu8s)
//============================================================================


struct  BFu7c_BFu7s_BFu9i  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu7s_BFu9i) C1{ Fc:7 Fs:7 Fi:9}



static void Test_BFu7c_BFu7s_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu9i");
    static STRUCT_IF_C BFu7c_BFu7s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7c_BFu7s_BFu9i");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu7s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu9i, BFu7c_BFu7s_BFu9i)
//============================================================================


struct  BFu7c_BFu7s_BFu9ll  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu7s_BFu9ll) C1{ Fc:7 Fs:7 FL:9}



static void Test_BFu7c_BFu7s_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu7s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu7s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, 1, "BFu7c_BFu7s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 6, 9, hide_ull(1LL<<8), "BFu7c_BFu7s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu9ll, BFu7c_BFu7s_BFu9ll)
//============================================================================


struct  BFu7c_BFu7s_BFu9s  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu7s_BFu9s) C1{ Fc:7 Fs:7 Fs:9}



static void Test_BFu7c_BFu7s_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu7s_BFu9s");
    static STRUCT_IF_C BFu7c_BFu7s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu7s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu7s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_BFu9s, BFu7c_BFu7s_BFu9s)
//============================================================================


struct  BFu7c_BFu7s_C  {
  unsigned char v1:7;
  unsigned short v2:7;
  char v3;
};
//SIG(1 BFu7c_BFu7s_C) C1{ Fc:7 Fs:7 Fc}



static void Test_BFu7c_BFu7s_C()
{
  {
    init_simple_test("BFu7c_BFu7s_C");
    static STRUCT_IF_C BFu7c_BFu7s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_C");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_C, BFu7c_BFu7s_C)
//============================================================================


struct  BFu7c_BFu7s_D  {
  unsigned char v1:7;
  unsigned short v2:7;
  double v3;
};
//SIG(1 BFu7c_BFu7s_D) C1{ Fc:7 Fs:7 FL}



static void Test_BFu7c_BFu7s_D()
{
  {
    init_simple_test("BFu7c_BFu7s_D");
    static STRUCT_IF_C BFu7c_BFu7s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_D");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_D, BFu7c_BFu7s_D)
//============================================================================


struct  BFu7c_BFu7s_F  {
  unsigned char v1:7;
  unsigned short v2:7;
  float v3;
};
//SIG(1 BFu7c_BFu7s_F) C1{ Fc:7 Fs:7 Fi}



static void Test_BFu7c_BFu7s_F()
{
  {
    init_simple_test("BFu7c_BFu7s_F");
    static STRUCT_IF_C BFu7c_BFu7s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_F");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_F, BFu7c_BFu7s_F)
//============================================================================


struct  BFu7c_BFu7s_I  {
  unsigned char v1:7;
  unsigned short v2:7;
  int v3;
};
//SIG(1 BFu7c_BFu7s_I) C1{ Fc:7 Fs:7 Fi}



static void Test_BFu7c_BFu7s_I()
{
  {
    init_simple_test("BFu7c_BFu7s_I");
    static STRUCT_IF_C BFu7c_BFu7s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_I");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_I, BFu7c_BFu7s_I)
//============================================================================


struct  BFu7c_BFu7s_Ip  {
  unsigned char v1:7;
  unsigned short v2:7;
  int *v3;
};
//SIG(1 BFu7c_BFu7s_Ip) C1{ Fc:7 Fs:7 Fp}



static void Test_BFu7c_BFu7s_Ip()
{
  {
    init_simple_test("BFu7c_BFu7s_Ip");
    static STRUCT_IF_C BFu7c_BFu7s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu7s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_Ip, BFu7c_BFu7s_Ip)
//============================================================================


struct  BFu7c_BFu7s_L  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu7s_L) C1{ Fc:7 Fs:7 FL}



static void Test_BFu7c_BFu7s_L()
{
  {
    init_simple_test("BFu7c_BFu7s_L");
    static STRUCT_IF_C BFu7c_BFu7s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_L");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_L, BFu7c_BFu7s_L)
//============================================================================


struct  BFu7c_BFu7s_S  {
  unsigned char v1:7;
  unsigned short v2:7;
  short v3;
};
//SIG(1 BFu7c_BFu7s_S) C1{ Fc:7 Fs:7 Fs}



static void Test_BFu7c_BFu7s_S()
{
  {
    init_simple_test("BFu7c_BFu7s_S");
    static STRUCT_IF_C BFu7c_BFu7s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_S");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_S, BFu7c_BFu7s_S)
//============================================================================


struct  BFu7c_BFu7s_Uc  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu7s_Uc) C1{ Fc:7 Fs:7 Fc}



static void Test_BFu7c_BFu7s_Uc()
{
  {
    init_simple_test("BFu7c_BFu7s_Uc");
    static STRUCT_IF_C BFu7c_BFu7s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_Uc, BFu7c_BFu7s_Uc)
//============================================================================


struct  BFu7c_BFu7s_Ui  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu7s_Ui) C1{ Fc:7 Fs:7 Fi}



static void Test_BFu7c_BFu7s_Ui()
{
  {
    init_simple_test("BFu7c_BFu7s_Ui");
    static STRUCT_IF_C BFu7c_BFu7s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu7s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu7s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu7s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_Ui, BFu7c_BFu7s_Ui)
//============================================================================


struct  BFu7c_BFu7s_Ul  {
  unsigned char v1:7;
  unsigned short v2:7;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu7s_Ul) C1{ Fc:7 Fs:7 FL}



static void Test_BFu7c_BFu7s_Ul()
{
  {
    init_simple_test("BFu7c_BFu7s_Ul");
    static STRUCT_IF_C BFu7c_BFu7s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu7s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_Ul, BFu7c_BFu7s_Ul)
//============================================================================


struct  BFu7c_BFu7s_Us  {
  unsigned char v1:7;
  unsigned short v2:7;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu7s_Us) C1{ Fc:7 Fs:7 Fs}



static void Test_BFu7c_BFu7s_Us()
{
  {
    init_simple_test("BFu7c_BFu7s_Us");
    static STRUCT_IF_C BFu7c_BFu7s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu7s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu7s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_Us");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu7s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_Us, BFu7c_BFu7s_Us)
//============================================================================


struct  BFu7c_BFu7s_Vp  {
  unsigned char v1:7;
  unsigned short v2:7;
  void *v3;
};
//SIG(1 BFu7c_BFu7s_Vp) C1{ Fc:7 Fs:7 Fp}



static void Test_BFu7c_BFu7s_Vp()
{
  {
    init_simple_test("BFu7c_BFu7s_Vp");
    static STRUCT_IF_C BFu7c_BFu7s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu7s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu7s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu7s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7c_BFu7s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu7s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu7s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu7s_Vp, BFu7c_BFu7s_Vp)
//============================================================================


struct  BFu7c_BFu8c  {
  unsigned char v1:7;
  unsigned char v2:8;
};
//SIG(1 BFu7c_BFu8c) C1{ Fc:7 Fc:8}



static void Test_BFu7c_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu8c");
    static STRUCT_IF_C BFu7c_BFu8c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c, BFu7c_BFu8c)
//============================================================================


struct  BFu7c_BFu8c_BFu15i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu8c_BFu15i) C1{ Fc:7 Fc:8 Fi:15}



static void Test_BFu7c_BFu8c_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu15i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu15i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu8c_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu8c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu15i, BFu7c_BFu8c_BFu15i)
//============================================================================


struct  BFu7c_BFu8c_BFu15ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu8c_BFu15ll) C1{ Fc:7 Fc:8 FL:15}



static void Test_BFu7c_BFu8c_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu15ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu8c_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu8c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu15ll, BFu7c_BFu8c_BFu15ll)
//============================================================================


struct  BFu7c_BFu8c_BFu15s  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu8c_BFu15s) C1{ Fc:7 Fc:8 Fs:15}



static void Test_BFu7c_BFu8c_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu15s");
    static STRUCT_IF_C BFu7c_BFu8c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu15s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu8c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu8c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu15s, BFu7c_BFu8c_BFu15s)
//============================================================================


struct  BFu7c_BFu8c_BFu16i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu8c_BFu16i) C1{ Fc:7 Fc:8 Fi:16}



static void Test_BFu7c_BFu8c_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu16i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu16i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu8c_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu8c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu16i, BFu7c_BFu8c_BFu16i)
//============================================================================


struct  BFu7c_BFu8c_BFu16ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu8c_BFu16ll) C1{ Fc:7 Fc:8 FL:16}



static void Test_BFu7c_BFu8c_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu16ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu8c_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu8c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu16ll, BFu7c_BFu8c_BFu16ll)
//============================================================================


struct  BFu7c_BFu8c_BFu16s  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu8c_BFu16s) C1{ Fc:7 Fc:8 Fs:16}



static void Test_BFu7c_BFu8c_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu16s");
    static STRUCT_IF_C BFu7c_BFu8c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu16s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu8c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu8c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu16s, BFu7c_BFu8c_BFu16s)
//============================================================================


struct  BFu7c_BFu8c_BFu17i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu8c_BFu17i) C1{ Fc:7 Fc:8 Fi:17}



static void Test_BFu7c_BFu8c_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu17i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu17i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu8c_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu8c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu17i, BFu7c_BFu8c_BFu17i)
//============================================================================


struct  BFu7c_BFu8c_BFu17ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu8c_BFu17ll) C1{ Fc:7 Fc:8 FL:17}



static void Test_BFu7c_BFu8c_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu17ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7c_BFu8c_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu8c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu17ll, BFu7c_BFu8c_BFu17ll)
//============================================================================


struct  BFu7c_BFu8c_BFu1c  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu8c_BFu1c) C1{ Fc:7 Fc:8 Fc:1}



static void Test_BFu7c_BFu8c_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu1c");
    static STRUCT_IF_C BFu7c_BFu8c_BFu1c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu8c_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu8c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu1c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu8c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu1c, BFu7c_BFu8c_BFu1c)
//============================================================================


struct  BFu7c_BFu8c_BFu1i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu8c_BFu1i) C1{ Fc:7 Fc:8 Fi:1}



static void Test_BFu7c_BFu8c_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu1i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu1i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu8c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu1i, BFu7c_BFu8c_BFu1i)
//============================================================================


struct  BFu7c_BFu8c_BFu1ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu8c_BFu1ll) C1{ Fc:7 Fc:8 FL:1}



static void Test_BFu7c_BFu8c_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu1ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu8c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu1ll, BFu7c_BFu8c_BFu1ll)
//============================================================================


struct  BFu7c_BFu8c_BFu1s  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu8c_BFu1s) C1{ Fc:7 Fc:8 Fs:1}



static void Test_BFu7c_BFu8c_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu1s");
    static STRUCT_IF_C BFu7c_BFu8c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu1s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu8c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu1s, BFu7c_BFu8c_BFu1s)
//============================================================================


struct  BFu7c_BFu8c_BFu31i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu8c_BFu31i) C1{ Fc:7 Fc:8 Fi:31}



static void Test_BFu7c_BFu8c_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu31i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu31i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu8c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu8c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu31i, BFu7c_BFu8c_BFu31i)
//============================================================================


struct  BFu7c_BFu8c_BFu31ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu8c_BFu31ll) C1{ Fc:7 Fc:8 FL:31}



static void Test_BFu7c_BFu8c_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu31ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7c_BFu8c_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu8c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu31ll, BFu7c_BFu8c_BFu31ll)
//============================================================================


struct  BFu7c_BFu8c_BFu32i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu8c_BFu32i) C1{ Fc:7 Fc:8 Fi:32}



static void Test_BFu7c_BFu8c_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu32i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu32i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu8c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu8c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu32i, BFu7c_BFu8c_BFu32i)
//============================================================================


struct  BFu7c_BFu8c_BFu32ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu8c_BFu32ll) C1{ Fc:7 Fc:8 FL:32}



static void Test_BFu7c_BFu8c_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu32ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7c_BFu8c_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu8c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu32ll, BFu7c_BFu8c_BFu32ll)
//============================================================================


struct  BFu7c_BFu8c_BFu33  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu8c_BFu33) C1{ Fc:7 Fc:8 FL:33}



static void Test_BFu7c_BFu8c_BFu33()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu33");
    static STRUCT_IF_C BFu7c_BFu8c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu33");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7c_BFu8c_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu8c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu33, BFu7c_BFu8c_BFu33)
//============================================================================


struct  BFu7c_BFu8c_BFu7c  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu8c_BFu7c) C1{ Fc:7 Fc:8 Fc:7}



static void Test_BFu7c_BFu8c_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu7c");
    static STRUCT_IF_C BFu7c_BFu8c_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu8c_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu8c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu7c, BFu7c_BFu8c_BFu7c)
//============================================================================


struct  BFu7c_BFu8c_BFu7i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu8c_BFu7i) C1{ Fc:7 Fc:8 Fi:7}



static void Test_BFu7c_BFu8c_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu7i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu7i, BFu7c_BFu8c_BFu7i)
//============================================================================


struct  BFu7c_BFu8c_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu8c_BFu7ll) C1{ Fc:7 Fc:8 FL:7}



static void Test_BFu7c_BFu8c_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu7ll, BFu7c_BFu8c_BFu7ll)
//============================================================================


struct  BFu7c_BFu8c_BFu7s  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu8c_BFu7s) C1{ Fc:7 Fc:8 Fs:7}



static void Test_BFu7c_BFu8c_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu7s");
    static STRUCT_IF_C BFu7c_BFu8c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu7s, BFu7c_BFu8c_BFu7s)
//============================================================================


struct  BFu7c_BFu8c_BFu8c  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu8c_BFu8c) C1{ Fc:7 Fc:8 Fc:8}



static void Test_BFu7c_BFu8c_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu8c");
    static STRUCT_IF_C BFu7c_BFu8c_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu8c_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu8c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu8c");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8c_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu8c, BFu7c_BFu8c_BFu8c)
//============================================================================


struct  BFu7c_BFu8c_BFu8i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu8c_BFu8i) C1{ Fc:7 Fc:8 Fi:8}



static void Test_BFu7c_BFu8c_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu8i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu8i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8c_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu8i, BFu7c_BFu8c_BFu8i)
//============================================================================


struct  BFu7c_BFu8c_BFu8ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu8c_BFu8ll) C1{ Fc:7 Fc:8 FL:8}



static void Test_BFu7c_BFu8c_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8c_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu8ll, BFu7c_BFu8c_BFu8ll)
//============================================================================


struct  BFu7c_BFu8c_BFu8s  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu8c_BFu8s) C1{ Fc:7 Fc:8 Fs:8}



static void Test_BFu7c_BFu8c_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu8s");
    static STRUCT_IF_C BFu7c_BFu8c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu8s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8c_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu8s, BFu7c_BFu8c_BFu8s)
//============================================================================


struct  BFu7c_BFu8c_BFu9i  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu8c_BFu9i) C1{ Fc:7 Fc:8 Fi:9}



static void Test_BFu7c_BFu8c_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu9i");
    static STRUCT_IF_C BFu7c_BFu8c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu9i");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu8c_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu8c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu9i, BFu7c_BFu8c_BFu9i)
//============================================================================


struct  BFu7c_BFu8c_BFu9ll  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu8c_BFu9ll) C1{ Fc:7 Fc:8 FL:9}



static void Test_BFu7c_BFu8c_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu8c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu9ll");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu8c_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu8c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu9ll, BFu7c_BFu8c_BFu9ll)
//============================================================================


struct  BFu7c_BFu8c_BFu9s  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu8c_BFu9s) C1{ Fc:7 Fc:8 Fs:9}



static void Test_BFu7c_BFu8c_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu8c_BFu9s");
    static STRUCT_IF_C BFu7c_BFu8c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_BFu9s");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu8c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu8c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_BFu9s, BFu7c_BFu8c_BFu9s)
//============================================================================


struct  BFu7c_BFu8c_C  {
  unsigned char v1:7;
  unsigned char v2:8;
  char v3;
};
//SIG(1 BFu7c_BFu8c_C) C1{ Fc:7 Fc:8 Fc}



static void Test_BFu7c_BFu8c_C()
{
  {
    init_simple_test("BFu7c_BFu8c_C");
    static STRUCT_IF_C BFu7c_BFu8c_C lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu8c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu8c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_C");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_C, BFu7c_BFu8c_C)
//============================================================================


struct  BFu7c_BFu8c_D  {
  unsigned char v1:7;
  unsigned char v2:8;
  double v3;
};
//SIG(1 BFu7c_BFu8c_D) C1{ Fc:7 Fc:8 FL}



static void Test_BFu7c_BFu8c_D()
{
  {
    init_simple_test("BFu7c_BFu8c_D");
    static STRUCT_IF_C BFu7c_BFu8c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_D");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_D, BFu7c_BFu8c_D)
//============================================================================


struct  BFu7c_BFu8c_F  {
  unsigned char v1:7;
  unsigned char v2:8;
  float v3;
};
//SIG(1 BFu7c_BFu8c_F) C1{ Fc:7 Fc:8 Fi}



static void Test_BFu7c_BFu8c_F()
{
  {
    init_simple_test("BFu7c_BFu8c_F");
    static STRUCT_IF_C BFu7c_BFu8c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_F");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_F, BFu7c_BFu8c_F)
//============================================================================


struct  BFu7c_BFu8c_I  {
  unsigned char v1:7;
  unsigned char v2:8;
  int v3;
};
//SIG(1 BFu7c_BFu8c_I) C1{ Fc:7 Fc:8 Fi}



static void Test_BFu7c_BFu8c_I()
{
  {
    init_simple_test("BFu7c_BFu8c_I");
    static STRUCT_IF_C BFu7c_BFu8c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_I");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_I, BFu7c_BFu8c_I)
//============================================================================


struct  BFu7c_BFu8c_Ip  {
  unsigned char v1:7;
  unsigned char v2:8;
  int *v3;
};
//SIG(1 BFu7c_BFu8c_Ip) C1{ Fc:7 Fc:8 Fp}



static void Test_BFu7c_BFu8c_Ip()
{
  {
    init_simple_test("BFu7c_BFu8c_Ip");
    static STRUCT_IF_C BFu7c_BFu8c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu8c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_Ip");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_Ip, BFu7c_BFu8c_Ip)
//============================================================================


struct  BFu7c_BFu8c_L  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu8c_L) C1{ Fc:7 Fc:8 FL}



static void Test_BFu7c_BFu8c_L()
{
  {
    init_simple_test("BFu7c_BFu8c_L");
    static STRUCT_IF_C BFu7c_BFu8c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_L");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_L, BFu7c_BFu8c_L)
//============================================================================


struct  BFu7c_BFu8c_S  {
  unsigned char v1:7;
  unsigned char v2:8;
  short v3;
};
//SIG(1 BFu7c_BFu8c_S) C1{ Fc:7 Fc:8 Fs}



static void Test_BFu7c_BFu8c_S()
{
  {
    init_simple_test("BFu7c_BFu8c_S");
    static STRUCT_IF_C BFu7c_BFu8c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_S");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_S, BFu7c_BFu8c_S)
//============================================================================


struct  BFu7c_BFu8c_Uc  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu8c_Uc) C1{ Fc:7 Fc:8 Fc}



static void Test_BFu7c_BFu8c_Uc()
{
  {
    init_simple_test("BFu7c_BFu8c_Uc");
    static STRUCT_IF_C BFu7c_BFu8c_Uc lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_BFu8c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_BFu8c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_Uc");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_Uc, BFu7c_BFu8c_Uc)
//============================================================================


struct  BFu7c_BFu8c_Ui  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu8c_Ui) C1{ Fc:7 Fc:8 Fi}



static void Test_BFu7c_BFu8c_Ui()
{
  {
    init_simple_test("BFu7c_BFu8c_Ui");
    static STRUCT_IF_C BFu7c_BFu8c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_Ui");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_Ui, BFu7c_BFu8c_Ui)
//============================================================================


struct  BFu7c_BFu8c_Ul  {
  unsigned char v1:7;
  unsigned char v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu8c_Ul) C1{ Fc:7 Fc:8 FL}



static void Test_BFu7c_BFu8c_Ul()
{
  {
    init_simple_test("BFu7c_BFu8c_Ul");
    static STRUCT_IF_C BFu7c_BFu8c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_Ul");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_Ul, BFu7c_BFu8c_Ul)
//============================================================================


struct  BFu7c_BFu8c_Us  {
  unsigned char v1:7;
  unsigned char v2:8;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu8c_Us) C1{ Fc:7 Fc:8 Fs}



static void Test_BFu7c_BFu8c_Us()
{
  {
    init_simple_test("BFu7c_BFu8c_Us");
    static STRUCT_IF_C BFu7c_BFu8c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_Us");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_Us, BFu7c_BFu8c_Us)
//============================================================================


struct  BFu7c_BFu8c_Vp  {
  unsigned char v1:7;
  unsigned char v2:8;
  void *v3;
};
//SIG(1 BFu7c_BFu8c_Vp) C1{ Fc:7 Fc:8 Fp}



static void Test_BFu7c_BFu8c_Vp()
{
  {
    init_simple_test("BFu7c_BFu8c_Vp");
    static STRUCT_IF_C BFu7c_BFu8c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu8c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, 1, "BFu7c_BFu8c_Vp");
    set_bf_and_test(lv, v2, 1, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8c_Vp, BFu7c_BFu8c_Vp)
//============================================================================


struct  BFu7c_BFu8i  {
  unsigned char v1:7;
  unsigned int v2:8;
};
//SIG(1 BFu7c_BFu8i) C1{ Fc:7 Fi:8}



static void Test_BFu7c_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu8i");
    static STRUCT_IF_C BFu7c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i, BFu7c_BFu8i)
//============================================================================


struct  BFu7c_BFu8i_BFu15i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu8i_BFu15i) C1{ Fc:7 Fi:8 Fi:15}



static void Test_BFu7c_BFu8i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7c_BFu8i_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu8i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu15i, BFu7c_BFu8i_BFu15i)
//============================================================================


struct  BFu7c_BFu8i_BFu15ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu8i_BFu15ll) C1{ Fc:7 Fi:8 FL:15}



static void Test_BFu7c_BFu8i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7c_BFu8i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu8i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu15ll, BFu7c_BFu8i_BFu15ll)
//============================================================================


struct  BFu7c_BFu8i_BFu15s  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu8i_BFu15s) C1{ Fc:7 Fi:8 Fs:15}



static void Test_BFu7c_BFu8i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu8i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu8i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu8i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu15s, BFu7c_BFu8i_BFu15s)
//============================================================================


struct  BFu7c_BFu8i_BFu16i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu8i_BFu16i) C1{ Fc:7 Fi:8 Fi:16}



static void Test_BFu7c_BFu8i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7c_BFu8i_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu8i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu16i, BFu7c_BFu8i_BFu16i)
//============================================================================


struct  BFu7c_BFu8i_BFu16ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu8i_BFu16ll) C1{ Fc:7 Fi:8 FL:16}



static void Test_BFu7c_BFu8i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7c_BFu8i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu8i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu16ll, BFu7c_BFu8i_BFu16ll)
//============================================================================


struct  BFu7c_BFu8i_BFu16s  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu8i_BFu16s) C1{ Fc:7 Fi:8 Fs:16}



static void Test_BFu7c_BFu8i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu8i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu8i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu8i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu16s, BFu7c_BFu8i_BFu16s)
//============================================================================


struct  BFu7c_BFu8i_BFu17i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu8i_BFu17i) C1{ Fc:7 Fi:8 Fi:17}



static void Test_BFu7c_BFu8i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7c_BFu8i_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu8i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu17i, BFu7c_BFu8i_BFu17i)
//============================================================================


struct  BFu7c_BFu8i_BFu17ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu8i_BFu17ll) C1{ Fc:7 Fi:8 FL:17}



static void Test_BFu7c_BFu8i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7c_BFu8i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu8i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu17ll, BFu7c_BFu8i_BFu17ll)
//============================================================================


struct  BFu7c_BFu8i_BFu1c  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu8i_BFu1c) C1{ Fc:7 Fi:8 Fc:1}



static void Test_BFu7c_BFu8i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu8i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu1c, BFu7c_BFu8i_BFu1c)
//============================================================================


struct  BFu7c_BFu8i_BFu1i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu8i_BFu1i) C1{ Fc:7 Fi:8 Fi:1}



static void Test_BFu7c_BFu8i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu1i, BFu7c_BFu8i_BFu1i)
//============================================================================


struct  BFu7c_BFu8i_BFu1ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu8i_BFu1ll) C1{ Fc:7 Fi:8 FL:1}



static void Test_BFu7c_BFu8i_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu1ll, BFu7c_BFu8i_BFu1ll)
//============================================================================


struct  BFu7c_BFu8i_BFu1s  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu8i_BFu1s) C1{ Fc:7 Fi:8 Fs:1}



static void Test_BFu7c_BFu8i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu8i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu1s, BFu7c_BFu8i_BFu1s)
//============================================================================


struct  BFu7c_BFu8i_BFu31i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu8i_BFu31i) C1{ Fc:7 Fi:8 Fi:31}



static void Test_BFu7c_BFu8i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu8i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu8i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu31i, BFu7c_BFu8i_BFu31i)
//============================================================================


struct  BFu7c_BFu8i_BFu31ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu8i_BFu31ll) C1{ Fc:7 Fi:8 FL:31}



static void Test_BFu7c_BFu8i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7c_BFu8i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu8i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu31ll, BFu7c_BFu8i_BFu31ll)
//============================================================================


struct  BFu7c_BFu8i_BFu32i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu8i_BFu32i) C1{ Fc:7 Fi:8 Fi:32}



static void Test_BFu7c_BFu8i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu8i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu8i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu32i, BFu7c_BFu8i_BFu32i)
//============================================================================


struct  BFu7c_BFu8i_BFu32ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu8i_BFu32ll) C1{ Fc:7 Fi:8 FL:32}



static void Test_BFu7c_BFu8i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7c_BFu8i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu8i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu32ll, BFu7c_BFu8i_BFu32ll)
//============================================================================


struct  BFu7c_BFu8i_BFu33  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu8i_BFu33) C1{ Fc:7 Fi:8 FL:33}



static void Test_BFu7c_BFu8i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu33");
    static STRUCT_IF_C BFu7c_BFu8i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7c_BFu8i_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu8i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu33, BFu7c_BFu8i_BFu33)
//============================================================================


struct  BFu7c_BFu8i_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu8i_BFu7c) C1{ Fc:7 Fi:8 Fc:7}



static void Test_BFu7c_BFu8i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu8i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu7c, BFu7c_BFu8i_BFu7c)
//============================================================================


struct  BFu7c_BFu8i_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu8i_BFu7i) C1{ Fc:7 Fi:8 Fi:7}



static void Test_BFu7c_BFu8i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu8i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu7i, BFu7c_BFu8i_BFu7i)
//============================================================================


struct  BFu7c_BFu8i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu8i_BFu7ll) C1{ Fc:7 Fi:8 FL:7}



static void Test_BFu7c_BFu8i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu8i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu7ll, BFu7c_BFu8i_BFu7ll)
//============================================================================


struct  BFu7c_BFu8i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu8i_BFu7s) C1{ Fc:7 Fi:8 Fs:7}



static void Test_BFu7c_BFu8i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu8i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu7s, BFu7c_BFu8i_BFu7s)
//============================================================================


struct  BFu7c_BFu8i_BFu8c  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu8i_BFu8c) C1{ Fc:7 Fi:8 Fc:8}



static void Test_BFu7c_BFu8i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu8i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu8c, BFu7c_BFu8i_BFu8c)
//============================================================================


struct  BFu7c_BFu8i_BFu8i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu8i_BFu8i) C1{ Fc:7 Fi:8 Fi:8}



static void Test_BFu7c_BFu8i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7c_BFu8i_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu8i, BFu7c_BFu8i_BFu8i)
//============================================================================


struct  BFu7c_BFu8i_BFu8ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu8i_BFu8ll) C1{ Fc:7 Fi:8 FL:8}



static void Test_BFu7c_BFu8i_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7c_BFu8i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu8ll, BFu7c_BFu8i_BFu8ll)
//============================================================================


struct  BFu7c_BFu8i_BFu8s  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu8i_BFu8s) C1{ Fc:7 Fi:8 Fs:8}



static void Test_BFu7c_BFu8i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu8i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu8s, BFu7c_BFu8i_BFu8s)
//============================================================================


struct  BFu7c_BFu8i_BFu9i  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu8i_BFu9i) C1{ Fc:7 Fi:8 Fi:9}



static void Test_BFu7c_BFu8i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu8i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7c_BFu8i_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu8i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu9i, BFu7c_BFu8i_BFu9i)
//============================================================================


struct  BFu7c_BFu8i_BFu9ll  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu8i_BFu9ll) C1{ Fc:7 Fi:8 FL:9}



static void Test_BFu7c_BFu8i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu8i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7c_BFu8i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu8i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu9ll, BFu7c_BFu8i_BFu9ll)
//============================================================================


struct  BFu7c_BFu8i_BFu9s  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu8i_BFu9s) C1{ Fc:7 Fi:8 Fs:9}



static void Test_BFu7c_BFu8i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu8i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu8i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu8i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu8i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_BFu9s, BFu7c_BFu8i_BFu9s)
//============================================================================


struct  BFu7c_BFu8i_C  {
  unsigned char v1:7;
  unsigned int v2:8;
  char v3;
};
//SIG(1 BFu7c_BFu8i_C) C1{ Fc:7 Fi:8 Fc}



static void Test_BFu7c_BFu8i_C()
{
  {
    init_simple_test("BFu7c_BFu8i_C");
    static STRUCT_IF_C BFu7c_BFu8i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_C, BFu7c_BFu8i_C)
//============================================================================


struct  BFu7c_BFu8i_D  {
  unsigned char v1:7;
  unsigned int v2:8;
  double v3;
};
//SIG(1 BFu7c_BFu8i_D) C1{ Fc:7 Fi:8 FL}



static void Test_BFu7c_BFu8i_D()
{
  {
    init_simple_test("BFu7c_BFu8i_D");
    static STRUCT_IF_C BFu7c_BFu8i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_D, BFu7c_BFu8i_D)
//============================================================================


struct  BFu7c_BFu8i_F  {
  unsigned char v1:7;
  unsigned int v2:8;
  float v3;
};
//SIG(1 BFu7c_BFu8i_F) C1{ Fc:7 Fi:8 Fi}



static void Test_BFu7c_BFu8i_F()
{
  {
    init_simple_test("BFu7c_BFu8i_F");
    static STRUCT_IF_C BFu7c_BFu8i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_F, BFu7c_BFu8i_F)
//============================================================================


struct  BFu7c_BFu8i_I  {
  unsigned char v1:7;
  unsigned int v2:8;
  int v3;
};
//SIG(1 BFu7c_BFu8i_I) C1{ Fc:7 Fi:8 Fi}



static void Test_BFu7c_BFu8i_I()
{
  {
    init_simple_test("BFu7c_BFu8i_I");
    static STRUCT_IF_C BFu7c_BFu8i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_I, BFu7c_BFu8i_I)
//============================================================================


struct  BFu7c_BFu8i_Ip  {
  unsigned char v1:7;
  unsigned int v2:8;
  int *v3;
};
//SIG(1 BFu7c_BFu8i_Ip) C1{ Fc:7 Fi:8 Fp}



static void Test_BFu7c_BFu8i_Ip()
{
  {
    init_simple_test("BFu7c_BFu8i_Ip");
    static STRUCT_IF_C BFu7c_BFu8i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu8i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_Ip, BFu7c_BFu8i_Ip)
//============================================================================


struct  BFu7c_BFu8i_L  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu8i_L) C1{ Fc:7 Fi:8 FL}



static void Test_BFu7c_BFu8i_L()
{
  {
    init_simple_test("BFu7c_BFu8i_L");
    static STRUCT_IF_C BFu7c_BFu8i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_L, BFu7c_BFu8i_L)
//============================================================================


struct  BFu7c_BFu8i_S  {
  unsigned char v1:7;
  unsigned int v2:8;
  short v3;
};
//SIG(1 BFu7c_BFu8i_S) C1{ Fc:7 Fi:8 Fs}



static void Test_BFu7c_BFu8i_S()
{
  {
    init_simple_test("BFu7c_BFu8i_S");
    static STRUCT_IF_C BFu7c_BFu8i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_S, BFu7c_BFu8i_S)
//============================================================================


struct  BFu7c_BFu8i_Uc  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu8i_Uc) C1{ Fc:7 Fi:8 Fc}



static void Test_BFu7c_BFu8i_Uc()
{
  {
    init_simple_test("BFu7c_BFu8i_Uc");
    static STRUCT_IF_C BFu7c_BFu8i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_Uc, BFu7c_BFu8i_Uc)
//============================================================================


struct  BFu7c_BFu8i_Ui  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu8i_Ui) C1{ Fc:7 Fi:8 Fi}



static void Test_BFu7c_BFu8i_Ui()
{
  {
    init_simple_test("BFu7c_BFu8i_Ui");
    static STRUCT_IF_C BFu7c_BFu8i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_Ui, BFu7c_BFu8i_Ui)
//============================================================================


struct  BFu7c_BFu8i_Ul  {
  unsigned char v1:7;
  unsigned int v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu8i_Ul) C1{ Fc:7 Fi:8 FL}



static void Test_BFu7c_BFu8i_Ul()
{
  {
    init_simple_test("BFu7c_BFu8i_Ul");
    static STRUCT_IF_C BFu7c_BFu8i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_Ul, BFu7c_BFu8i_Ul)
//============================================================================


struct  BFu7c_BFu8i_Us  {
  unsigned char v1:7;
  unsigned int v2:8;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu8i_Us) C1{ Fc:7 Fi:8 Fs}



static void Test_BFu7c_BFu8i_Us()
{
  {
    init_simple_test("BFu7c_BFu8i_Us");
    static STRUCT_IF_C BFu7c_BFu8i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_Us, BFu7c_BFu8i_Us)
//============================================================================


struct  BFu7c_BFu8i_Vp  {
  unsigned char v1:7;
  unsigned int v2:8;
  void *v3;
};
//SIG(1 BFu7c_BFu8i_Vp) C1{ Fc:7 Fi:8 Fp}



static void Test_BFu7c_BFu8i_Vp()
{
  {
    init_simple_test("BFu7c_BFu8i_Vp");
    static STRUCT_IF_C BFu7c_BFu8i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu8i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8i_Vp, BFu7c_BFu8i_Vp)
//============================================================================


struct  BFu7c_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
};
//SIG(1 BFu7c_BFu8ll) C1{ Fc:7 FL:8}



static void Test_BFu7c_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll, BFu7c_BFu8ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu15i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu8ll_BFu15i) C1{ Fc:7 FL:8 Fi:15}



static void Test_BFu7c_BFu8ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7c_BFu8ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu8ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu15i, BFu7c_BFu8ll_BFu15i)
//============================================================================


struct  BFu7c_BFu8ll_BFu15ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu8ll_BFu15ll) C1{ Fc:7 FL:8 FL:15}



static void Test_BFu7c_BFu8ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7c_BFu8ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu8ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu15ll, BFu7c_BFu8ll_BFu15ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu15s  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu8ll_BFu15s) C1{ Fc:7 FL:8 Fs:15}



static void Test_BFu7c_BFu8ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu8ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu8ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu15s, BFu7c_BFu8ll_BFu15s)
//============================================================================


struct  BFu7c_BFu8ll_BFu16i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu8ll_BFu16i) C1{ Fc:7 FL:8 Fi:16}



static void Test_BFu7c_BFu8ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7c_BFu8ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu8ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu16i, BFu7c_BFu8ll_BFu16i)
//============================================================================


struct  BFu7c_BFu8ll_BFu16ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu8ll_BFu16ll) C1{ Fc:7 FL:8 FL:16}



static void Test_BFu7c_BFu8ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7c_BFu8ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu8ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu16ll, BFu7c_BFu8ll_BFu16ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu16s  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu8ll_BFu16s) C1{ Fc:7 FL:8 Fs:16}



static void Test_BFu7c_BFu8ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu8ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu8ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu16s, BFu7c_BFu8ll_BFu16s)
//============================================================================


struct  BFu7c_BFu8ll_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu8ll_BFu17i) C1{ Fc:7 FL:8 Fi:17}



static void Test_BFu7c_BFu8ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7c_BFu8ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu8ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu17i, BFu7c_BFu8ll_BFu17i)
//============================================================================


struct  BFu7c_BFu8ll_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu8ll_BFu17ll) C1{ Fc:7 FL:8 FL:17}



static void Test_BFu7c_BFu8ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7c_BFu8ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu8ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu17ll, BFu7c_BFu8ll_BFu17ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu1c  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu8ll_BFu1c) C1{ Fc:7 FL:8 Fc:1}



static void Test_BFu7c_BFu8ll_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu1c");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu1c, BFu7c_BFu8ll_BFu1c)
//============================================================================


struct  BFu7c_BFu8ll_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu8ll_BFu1i) C1{ Fc:7 FL:8 Fi:1}



static void Test_BFu7c_BFu8ll_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu1i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu1i, BFu7c_BFu8ll_BFu1i)
//============================================================================


struct  BFu7c_BFu8ll_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu8ll_BFu1ll) C1{ Fc:7 FL:8 FL:1}



static void Test_BFu7c_BFu8ll_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu1ll, BFu7c_BFu8ll_BFu1ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu8ll_BFu1s) C1{ Fc:7 FL:8 Fs:1}



static void Test_BFu7c_BFu8ll_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu1s");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu1s, BFu7c_BFu8ll_BFu1s)
//============================================================================


struct  BFu7c_BFu8ll_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu8ll_BFu31i) C1{ Fc:7 FL:8 Fi:31}



static void Test_BFu7c_BFu8ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu8ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu8ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu31i, BFu7c_BFu8ll_BFu31i)
//============================================================================


struct  BFu7c_BFu8ll_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu8ll_BFu31ll) C1{ Fc:7 FL:8 FL:31}



static void Test_BFu7c_BFu8ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7c_BFu8ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu8ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu31ll, BFu7c_BFu8ll_BFu31ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu8ll_BFu32i) C1{ Fc:7 FL:8 Fi:32}



static void Test_BFu7c_BFu8ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu8ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu8ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu32i, BFu7c_BFu8ll_BFu32i)
//============================================================================


struct  BFu7c_BFu8ll_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu8ll_BFu32ll) C1{ Fc:7 FL:8 FL:32}



static void Test_BFu7c_BFu8ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7c_BFu8ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu8ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu32ll, BFu7c_BFu8ll_BFu32ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu33  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu8ll_BFu33) C1{ Fc:7 FL:8 FL:33}



static void Test_BFu7c_BFu8ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7c_BFu8ll_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu8ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu33, BFu7c_BFu8ll_BFu33)
//============================================================================


struct  BFu7c_BFu8ll_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu8ll_BFu7c) C1{ Fc:7 FL:8 Fc:7}



static void Test_BFu7c_BFu8ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu7c, BFu7c_BFu8ll_BFu7c)
//============================================================================


struct  BFu7c_BFu8ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu8ll_BFu7i) C1{ Fc:7 FL:8 Fi:7}



static void Test_BFu7c_BFu8ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu8ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu7i, BFu7c_BFu8ll_BFu7i)
//============================================================================


struct  BFu7c_BFu8ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu8ll_BFu7ll) C1{ Fc:7 FL:8 FL:7}



static void Test_BFu7c_BFu8ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu8ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu7ll, BFu7c_BFu8ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu8ll_BFu7s) C1{ Fc:7 FL:8 Fs:7}



static void Test_BFu7c_BFu8ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu7s, BFu7c_BFu8ll_BFu7s)
//============================================================================


struct  BFu7c_BFu8ll_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu8ll_BFu8c) C1{ Fc:7 FL:8 Fc:8}



static void Test_BFu7c_BFu8ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu8c, BFu7c_BFu8ll_BFu8c)
//============================================================================


struct  BFu7c_BFu8ll_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu8ll_BFu8i) C1{ Fc:7 FL:8 Fi:8}



static void Test_BFu7c_BFu8ll_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu8i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7c_BFu8ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu8i, BFu7c_BFu8ll_BFu8i)
//============================================================================


struct  BFu7c_BFu8ll_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu8ll_BFu8ll) C1{ Fc:7 FL:8 FL:8}



static void Test_BFu7c_BFu8ll_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7c_BFu8ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu8ll, BFu7c_BFu8ll_BFu8ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu8ll_BFu8s) C1{ Fc:7 FL:8 Fs:8}



static void Test_BFu7c_BFu8ll_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu8s");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu8s, BFu7c_BFu8ll_BFu8s)
//============================================================================


struct  BFu7c_BFu8ll_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu8ll_BFu9i) C1{ Fc:7 FL:8 Fi:9}



static void Test_BFu7c_BFu8ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7c_BFu8ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu8ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu9i, BFu7c_BFu8ll_BFu9i)
//============================================================================


struct  BFu7c_BFu8ll_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu8ll_BFu9ll) C1{ Fc:7 FL:8 FL:9}



static void Test_BFu7c_BFu8ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7c_BFu8ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu8ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu9ll, BFu7c_BFu8ll_BFu9ll)
//============================================================================


struct  BFu7c_BFu8ll_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu8ll_BFu9s) C1{ Fc:7 FL:8 Fs:9}



static void Test_BFu7c_BFu8ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu8ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu8ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu8ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu8ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_BFu9s, BFu7c_BFu8ll_BFu9s)
//============================================================================


struct  BFu7c_BFu8ll_C  {
  unsigned char v1:7;
  __tsu64 v2:8;
  char v3;
};
//SIG(1 BFu7c_BFu8ll_C) C1{ Fc:7 FL:8 Fc}



static void Test_BFu7c_BFu8ll_C()
{
  {
    init_simple_test("BFu7c_BFu8ll_C");
    static STRUCT_IF_C BFu7c_BFu8ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_C, BFu7c_BFu8ll_C)
//============================================================================


struct  BFu7c_BFu8ll_D  {
  unsigned char v1:7;
  __tsu64 v2:8;
  double v3;
};
//SIG(1 BFu7c_BFu8ll_D) C1{ Fc:7 FL:8 FL}



static void Test_BFu7c_BFu8ll_D()
{
  {
    init_simple_test("BFu7c_BFu8ll_D");
    static STRUCT_IF_C BFu7c_BFu8ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_D, BFu7c_BFu8ll_D)
//============================================================================


struct  BFu7c_BFu8ll_F  {
  unsigned char v1:7;
  __tsu64 v2:8;
  float v3;
};
//SIG(1 BFu7c_BFu8ll_F) C1{ Fc:7 FL:8 Fi}



static void Test_BFu7c_BFu8ll_F()
{
  {
    init_simple_test("BFu7c_BFu8ll_F");
    static STRUCT_IF_C BFu7c_BFu8ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_F, BFu7c_BFu8ll_F)
//============================================================================


struct  BFu7c_BFu8ll_I  {
  unsigned char v1:7;
  __tsu64 v2:8;
  int v3;
};
//SIG(1 BFu7c_BFu8ll_I) C1{ Fc:7 FL:8 Fi}



static void Test_BFu7c_BFu8ll_I()
{
  {
    init_simple_test("BFu7c_BFu8ll_I");
    static STRUCT_IF_C BFu7c_BFu8ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_I, BFu7c_BFu8ll_I)
//============================================================================


struct  BFu7c_BFu8ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:8;
  int *v3;
};
//SIG(1 BFu7c_BFu8ll_Ip) C1{ Fc:7 FL:8 Fp}



static void Test_BFu7c_BFu8ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu8ll_Ip");
    static STRUCT_IF_C BFu7c_BFu8ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu8ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_Ip, BFu7c_BFu8ll_Ip)
//============================================================================


struct  BFu7c_BFu8ll_L  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu8ll_L) C1{ Fc:7 FL:8 FL}



static void Test_BFu7c_BFu8ll_L()
{
  {
    init_simple_test("BFu7c_BFu8ll_L");
    static STRUCT_IF_C BFu7c_BFu8ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_L, BFu7c_BFu8ll_L)
//============================================================================


struct  BFu7c_BFu8ll_S  {
  unsigned char v1:7;
  __tsu64 v2:8;
  short v3;
};
//SIG(1 BFu7c_BFu8ll_S) C1{ Fc:7 FL:8 Fs}



static void Test_BFu7c_BFu8ll_S()
{
  {
    init_simple_test("BFu7c_BFu8ll_S");
    static STRUCT_IF_C BFu7c_BFu8ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_S, BFu7c_BFu8ll_S)
//============================================================================


struct  BFu7c_BFu8ll_Uc  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu8ll_Uc) C1{ Fc:7 FL:8 Fc}



static void Test_BFu7c_BFu8ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu8ll_Uc");
    static STRUCT_IF_C BFu7c_BFu8ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_Uc, BFu7c_BFu8ll_Uc)
//============================================================================


struct  BFu7c_BFu8ll_Ui  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu8ll_Ui) C1{ Fc:7 FL:8 Fi}



static void Test_BFu7c_BFu8ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu8ll_Ui");
    static STRUCT_IF_C BFu7c_BFu8ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_Ui, BFu7c_BFu8ll_Ui)
//============================================================================


struct  BFu7c_BFu8ll_Ul  {
  unsigned char v1:7;
  __tsu64 v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu8ll_Ul) C1{ Fc:7 FL:8 FL}



static void Test_BFu7c_BFu8ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu8ll_Ul");
    static STRUCT_IF_C BFu7c_BFu8ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_Ul, BFu7c_BFu8ll_Ul)
//============================================================================


struct  BFu7c_BFu8ll_Us  {
  unsigned char v1:7;
  __tsu64 v2:8;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu8ll_Us) C1{ Fc:7 FL:8 Fs}



static void Test_BFu7c_BFu8ll_Us()
{
  {
    init_simple_test("BFu7c_BFu8ll_Us");
    static STRUCT_IF_C BFu7c_BFu8ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_Us, BFu7c_BFu8ll_Us)
//============================================================================


struct  BFu7c_BFu8ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:8;
  void *v3;
};
//SIG(1 BFu7c_BFu8ll_Vp) C1{ Fc:7 FL:8 Fp}



static void Test_BFu7c_BFu8ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu8ll_Vp");
    static STRUCT_IF_C BFu7c_BFu8ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu8ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8ll_Vp, BFu7c_BFu8ll_Vp)
//============================================================================


struct  BFu7c_BFu8s  {
  unsigned char v1:7;
  unsigned short v2:8;
};
//SIG(1 BFu7c_BFu8s) C1{ Fc:7 Fs:8}



static void Test_BFu7c_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu8s");
    static STRUCT_IF_C BFu7c_BFu8s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s, BFu7c_BFu8s)
//============================================================================


struct  BFu7c_BFu8s_BFu15i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu8s_BFu15i) C1{ Fc:7 Fs:8 Fi:15}



static void Test_BFu7c_BFu8s_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu15i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7c_BFu8s_BFu15i");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu8s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu15i, BFu7c_BFu8s_BFu15i)
//============================================================================


struct  BFu7c_BFu8s_BFu15ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu8s_BFu15ll) C1{ Fc:7 Fs:8 FL:15}



static void Test_BFu7c_BFu8s_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, 1, "BFu7c_BFu8s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 7, 15, hide_ull(1LL<<14), "BFu7c_BFu8s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu15ll, BFu7c_BFu8s_BFu15ll)
//============================================================================


struct  BFu7c_BFu8s_BFu15s  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu8s_BFu15s) C1{ Fc:7 Fs:8 Fs:15}



static void Test_BFu7c_BFu8s_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu15s");
    static STRUCT_IF_C BFu7c_BFu8s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu8s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu8s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu15s, BFu7c_BFu8s_BFu15s)
//============================================================================


struct  BFu7c_BFu8s_BFu16i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu8s_BFu16i) C1{ Fc:7 Fs:8 Fi:16}



static void Test_BFu7c_BFu8s_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu16i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7c_BFu8s_BFu16i");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu8s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu16i, BFu7c_BFu8s_BFu16i)
//============================================================================


struct  BFu7c_BFu8s_BFu16ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu8s_BFu16ll) C1{ Fc:7 Fs:8 FL:16}



static void Test_BFu7c_BFu8s_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, 1, "BFu7c_BFu8s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 7, 16, hide_ull(1LL<<15), "BFu7c_BFu8s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu16ll, BFu7c_BFu8s_BFu16ll)
//============================================================================


struct  BFu7c_BFu8s_BFu16s  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu8s_BFu16s) C1{ Fc:7 Fs:8 Fs:16}



static void Test_BFu7c_BFu8s_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu16s");
    static STRUCT_IF_C BFu7c_BFu8s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu8s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu8s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu16s, BFu7c_BFu8s_BFu16s)
//============================================================================


struct  BFu7c_BFu8s_BFu17i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu8s_BFu17i) C1{ Fc:7 Fs:8 Fi:17}



static void Test_BFu7c_BFu8s_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu17i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7c_BFu8s_BFu17i");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu8s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu17i, BFu7c_BFu8s_BFu17i)
//============================================================================


struct  BFu7c_BFu8s_BFu17ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu8s_BFu17ll) C1{ Fc:7 Fs:8 FL:17}



static void Test_BFu7c_BFu8s_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, 1, "BFu7c_BFu8s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 7, 17, hide_ull(1LL<<16), "BFu7c_BFu8s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu17ll, BFu7c_BFu8s_BFu17ll)
//============================================================================


struct  BFu7c_BFu8s_BFu1c  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu8s_BFu1c) C1{ Fc:7 Fs:8 Fc:1}



static void Test_BFu7c_BFu8s_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu1c");
    static STRUCT_IF_C BFu7c_BFu8s_BFu1c lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu8s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu1c");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu1c, BFu7c_BFu8s_BFu1c)
//============================================================================


struct  BFu7c_BFu8s_BFu1i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu8s_BFu1i) C1{ Fc:7 Fs:8 Fi:1}



static void Test_BFu7c_BFu8s_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu1i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu1i");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu1i, BFu7c_BFu8s_BFu1i)
//============================================================================


struct  BFu7c_BFu8s_BFu1ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu8s_BFu1ll) C1{ Fc:7 Fs:8 FL:1}



static void Test_BFu7c_BFu8s_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu1ll, BFu7c_BFu8s_BFu1ll)
//============================================================================


struct  BFu7c_BFu8s_BFu1s  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu8s_BFu1s) C1{ Fc:7 Fs:8 Fs:1}



static void Test_BFu7c_BFu8s_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu1s");
    static STRUCT_IF_C BFu7c_BFu8s_BFu1s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu8s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu1s");
    set_bf_and_test(lv, v3, 1, 7, 1, 1, "BFu7c_BFu8s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu1s, BFu7c_BFu8s_BFu1s)
//============================================================================


struct  BFu7c_BFu8s_BFu31i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu8s_BFu31i) C1{ Fc:7 Fs:8 Fi:31}



static void Test_BFu7c_BFu8s_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu31i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu8s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu8s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu31i, BFu7c_BFu8s_BFu31i)
//============================================================================


struct  BFu7c_BFu8s_BFu31ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu8s_BFu31ll) C1{ Fc:7 Fs:8 FL:31}



static void Test_BFu7c_BFu8s_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, 1, "BFu7c_BFu8s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 7, 31, hide_ull(1LL<<30), "BFu7c_BFu8s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu31ll, BFu7c_BFu8s_BFu31ll)
//============================================================================


struct  BFu7c_BFu8s_BFu32i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu8s_BFu32i) C1{ Fc:7 Fs:8 Fi:32}



static void Test_BFu7c_BFu8s_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu32i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu8s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu8s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu32i, BFu7c_BFu8s_BFu32i)
//============================================================================


struct  BFu7c_BFu8s_BFu32ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu8s_BFu32ll) C1{ Fc:7 Fs:8 FL:32}



static void Test_BFu7c_BFu8s_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, 1, "BFu7c_BFu8s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 7, 32, hide_ull(1LL<<31), "BFu7c_BFu8s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu32ll, BFu7c_BFu8s_BFu32ll)
//============================================================================


struct  BFu7c_BFu8s_BFu33  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu8s_BFu33) C1{ Fc:7 Fs:8 FL:33}



static void Test_BFu7c_BFu8s_BFu33()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu33");
    static STRUCT_IF_C BFu7c_BFu8s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, 1, "BFu7c_BFu8s_BFu33");
    set_bf_and_test(lv, v3, 1, 7, 33, hide_ull(1LL<<32), "BFu7c_BFu8s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu33, BFu7c_BFu8s_BFu33)
//============================================================================


struct  BFu7c_BFu8s_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu8s_BFu7c) C1{ Fc:7 Fs:8 Fc:7}



static void Test_BFu7c_BFu8s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu8s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu7c, BFu7c_BFu8s_BFu7c)
//============================================================================


struct  BFu7c_BFu8s_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu8s_BFu7i) C1{ Fc:7 Fs:8 Fi:7}



static void Test_BFu7c_BFu8s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu8s_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu7i, BFu7c_BFu8s_BFu7i)
//============================================================================


struct  BFu7c_BFu8s_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu8s_BFu7ll) C1{ Fc:7 Fs:8 FL:7}



static void Test_BFu7c_BFu8s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7c_BFu8s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu7ll, BFu7c_BFu8s_BFu7ll)
//============================================================================


struct  BFu7c_BFu8s_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu8s_BFu7s) C1{ Fc:7 Fs:8 Fs:7}



static void Test_BFu7c_BFu8s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu8s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu8s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu7s, BFu7c_BFu8s_BFu7s)
//============================================================================


struct  BFu7c_BFu8s_BFu8c  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu8s_BFu8c) C1{ Fc:7 Fs:8 Fc:8}



static void Test_BFu7c_BFu8s_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu8c");
    static STRUCT_IF_C BFu7c_BFu8s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu8c, BFu7c_BFu8s_BFu8c)
//============================================================================


struct  BFu7c_BFu8s_BFu8i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu8s_BFu8i) C1{ Fc:7 Fs:8 Fi:8}



static void Test_BFu7c_BFu8s_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu8i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7c_BFu8s_BFu8i");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu8i, BFu7c_BFu8s_BFu8i)
//============================================================================


struct  BFu7c_BFu8s_BFu8ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu8s_BFu8ll) C1{ Fc:7 Fs:8 FL:8}



static void Test_BFu7c_BFu8s_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, 1, "BFu7c_BFu8s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu8ll, BFu7c_BFu8s_BFu8ll)
//============================================================================


struct  BFu7c_BFu8s_BFu8s  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu8s_BFu8s) C1{ Fc:7 Fs:8 Fs:8}



static void Test_BFu7c_BFu8s_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu8s");
    static STRUCT_IF_C BFu7c_BFu8s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu8s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu8s, BFu7c_BFu8s_BFu8s)
//============================================================================


struct  BFu7c_BFu8s_BFu9i  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu8s_BFu9i) C1{ Fc:7 Fs:8 Fi:9}



static void Test_BFu7c_BFu8s_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu9i");
    static STRUCT_IF_C BFu7c_BFu8s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7c_BFu8s_BFu9i");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu8s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu9i, BFu7c_BFu8s_BFu9i)
//============================================================================


struct  BFu7c_BFu8s_BFu9ll  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu8s_BFu9ll) C1{ Fc:7 Fs:8 FL:9}



static void Test_BFu7c_BFu8s_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu8s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu8s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, 1, "BFu7c_BFu8s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu8s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu9ll, BFu7c_BFu8s_BFu9ll)
//============================================================================


struct  BFu7c_BFu8s_BFu9s  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu8s_BFu9s) C1{ Fc:7 Fs:8 Fs:9}



static void Test_BFu7c_BFu8s_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu8s_BFu9s");
    static STRUCT_IF_C BFu7c_BFu8s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu8s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu8s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_BFu9s, BFu7c_BFu8s_BFu9s)
//============================================================================


struct  BFu7c_BFu8s_C  {
  unsigned char v1:7;
  unsigned short v2:8;
  char v3;
};
//SIG(1 BFu7c_BFu8s_C) C1{ Fc:7 Fs:8 Fc}



static void Test_BFu7c_BFu8s_C()
{
  {
    init_simple_test("BFu7c_BFu8s_C");
    static STRUCT_IF_C BFu7c_BFu8s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_C");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_C, BFu7c_BFu8s_C)
//============================================================================


struct  BFu7c_BFu8s_D  {
  unsigned char v1:7;
  unsigned short v2:8;
  double v3;
};
//SIG(1 BFu7c_BFu8s_D) C1{ Fc:7 Fs:8 FL}



static void Test_BFu7c_BFu8s_D()
{
  {
    init_simple_test("BFu7c_BFu8s_D");
    static STRUCT_IF_C BFu7c_BFu8s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_D");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_D, BFu7c_BFu8s_D)
//============================================================================


struct  BFu7c_BFu8s_F  {
  unsigned char v1:7;
  unsigned short v2:8;
  float v3;
};
//SIG(1 BFu7c_BFu8s_F) C1{ Fc:7 Fs:8 Fi}



static void Test_BFu7c_BFu8s_F()
{
  {
    init_simple_test("BFu7c_BFu8s_F");
    static STRUCT_IF_C BFu7c_BFu8s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_F");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_F, BFu7c_BFu8s_F)
//============================================================================


struct  BFu7c_BFu8s_I  {
  unsigned char v1:7;
  unsigned short v2:8;
  int v3;
};
//SIG(1 BFu7c_BFu8s_I) C1{ Fc:7 Fs:8 Fi}



static void Test_BFu7c_BFu8s_I()
{
  {
    init_simple_test("BFu7c_BFu8s_I");
    static STRUCT_IF_C BFu7c_BFu8s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_I");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_I, BFu7c_BFu8s_I)
//============================================================================


struct  BFu7c_BFu8s_Ip  {
  unsigned char v1:7;
  unsigned short v2:8;
  int *v3;
};
//SIG(1 BFu7c_BFu8s_Ip) C1{ Fc:7 Fs:8 Fp}



static void Test_BFu7c_BFu8s_Ip()
{
  {
    init_simple_test("BFu7c_BFu8s_Ip");
    static STRUCT_IF_C BFu7c_BFu8s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu8s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_Ip, BFu7c_BFu8s_Ip)
//============================================================================


struct  BFu7c_BFu8s_L  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu8s_L) C1{ Fc:7 Fs:8 FL}



static void Test_BFu7c_BFu8s_L()
{
  {
    init_simple_test("BFu7c_BFu8s_L");
    static STRUCT_IF_C BFu7c_BFu8s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_L");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_L, BFu7c_BFu8s_L)
//============================================================================


struct  BFu7c_BFu8s_S  {
  unsigned char v1:7;
  unsigned short v2:8;
  short v3;
};
//SIG(1 BFu7c_BFu8s_S) C1{ Fc:7 Fs:8 Fs}



static void Test_BFu7c_BFu8s_S()
{
  {
    init_simple_test("BFu7c_BFu8s_S");
    static STRUCT_IF_C BFu7c_BFu8s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_S");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_S, BFu7c_BFu8s_S)
//============================================================================


struct  BFu7c_BFu8s_Uc  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu8s_Uc) C1{ Fc:7 Fs:8 Fc}



static void Test_BFu7c_BFu8s_Uc()
{
  {
    init_simple_test("BFu7c_BFu8s_Uc");
    static STRUCT_IF_C BFu7c_BFu8s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_Uc, BFu7c_BFu8s_Uc)
//============================================================================


struct  BFu7c_BFu8s_Ui  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu8s_Ui) C1{ Fc:7 Fs:8 Fi}



static void Test_BFu7c_BFu8s_Ui()
{
  {
    init_simple_test("BFu7c_BFu8s_Ui");
    static STRUCT_IF_C BFu7c_BFu8s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu8s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu8s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu8s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_Ui, BFu7c_BFu8s_Ui)
//============================================================================


struct  BFu7c_BFu8s_Ul  {
  unsigned char v1:7;
  unsigned short v2:8;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu8s_Ul) C1{ Fc:7 Fs:8 FL}



static void Test_BFu7c_BFu8s_Ul()
{
  {
    init_simple_test("BFu7c_BFu8s_Ul");
    static STRUCT_IF_C BFu7c_BFu8s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu8s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_Ul, BFu7c_BFu8s_Ul)
//============================================================================


struct  BFu7c_BFu8s_Us  {
  unsigned char v1:7;
  unsigned short v2:8;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu8s_Us) C1{ Fc:7 Fs:8 Fs}



static void Test_BFu7c_BFu8s_Us()
{
  {
    init_simple_test("BFu7c_BFu8s_Us");
    static STRUCT_IF_C BFu7c_BFu8s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu8s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu8s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_Us");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu8s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_Us, BFu7c_BFu8s_Us)
//============================================================================


struct  BFu7c_BFu8s_Vp  {
  unsigned char v1:7;
  unsigned short v2:8;
  void *v3;
};
//SIG(1 BFu7c_BFu8s_Vp) C1{ Fc:7 Fs:8 Fp}



static void Test_BFu7c_BFu8s_Vp()
{
  {
    init_simple_test("BFu7c_BFu8s_Vp");
    static STRUCT_IF_C BFu7c_BFu8s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu8s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu8s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu8s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, 1, "BFu7c_BFu8s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 8, hide_ull(1LL<<7), "BFu7c_BFu8s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu8s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu8s_Vp, BFu7c_BFu8s_Vp)
//============================================================================


struct  BFu7c_BFu9i  {
  unsigned char v1:7;
  unsigned int v2:9;
};
//SIG(1 BFu7c_BFu9i) C1{ Fc:7 Fi:9}



static void Test_BFu7c_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu9i");
    static STRUCT_IF_C BFu7c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i, BFu7c_BFu9i)
//============================================================================


struct  BFu7c_BFu9i_BFu15i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu9i_BFu15i) C1{ Fc:7 Fi:9 Fi:15}



static void Test_BFu7c_BFu9i_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu15i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9i_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu15i, BFu7c_BFu9i_BFu15i)
//============================================================================


struct  BFu7c_BFu9i_BFu15ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu9i_BFu15ll) C1{ Fc:7 Fi:9 FL:15}



static void Test_BFu7c_BFu9i_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu15ll, BFu7c_BFu9i_BFu15ll)
//============================================================================


struct  BFu7c_BFu9i_BFu15s  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu9i_BFu15s) C1{ Fc:7 Fi:9 Fs:15}



static void Test_BFu7c_BFu9i_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu15s");
    static STRUCT_IF_C BFu7c_BFu9i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu15s, BFu7c_BFu9i_BFu15s)
//============================================================================


struct  BFu7c_BFu9i_BFu16i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu9i_BFu16i) C1{ Fc:7 Fi:9 Fi:16}



static void Test_BFu7c_BFu9i_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu16i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9i_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu16i, BFu7c_BFu9i_BFu16i)
//============================================================================


struct  BFu7c_BFu9i_BFu16ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu9i_BFu16ll) C1{ Fc:7 Fi:9 FL:16}



static void Test_BFu7c_BFu9i_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu16ll, BFu7c_BFu9i_BFu16ll)
//============================================================================


struct  BFu7c_BFu9i_BFu16s  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu9i_BFu16s) C1{ Fc:7 Fi:9 Fs:16}



static void Test_BFu7c_BFu9i_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu16s");
    static STRUCT_IF_C BFu7c_BFu9i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu16s, BFu7c_BFu9i_BFu16s)
//============================================================================


struct  BFu7c_BFu9i_BFu17i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu9i_BFu17i) C1{ Fc:7 Fi:9 Fi:17}



static void Test_BFu7c_BFu9i_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu17i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu9i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu9i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu17i, BFu7c_BFu9i_BFu17i)
//============================================================================


struct  BFu7c_BFu9i_BFu17ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu9i_BFu17ll) C1{ Fc:7 Fi:9 FL:17}



static void Test_BFu7c_BFu9i_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7c_BFu9i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu9i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu17ll, BFu7c_BFu9i_BFu17ll)
//============================================================================


struct  BFu7c_BFu9i_BFu1c  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu9i_BFu1c) C1{ Fc:7 Fi:9 Fc:1}



static void Test_BFu7c_BFu9i_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu1c");
    static STRUCT_IF_C BFu7c_BFu9i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu1c, BFu7c_BFu9i_BFu1c)
//============================================================================


struct  BFu7c_BFu9i_BFu1i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu9i_BFu1i) C1{ Fc:7 Fi:9 Fi:1}



static void Test_BFu7c_BFu9i_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu1i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu1i, BFu7c_BFu9i_BFu1i)
//============================================================================


struct  BFu7c_BFu9i_BFu1ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu9i_BFu1ll) C1{ Fc:7 Fi:9 FL:1}



static void Test_BFu7c_BFu9i_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu1ll, BFu7c_BFu9i_BFu1ll)
//============================================================================


struct  BFu7c_BFu9i_BFu1s  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu9i_BFu1s) C1{ Fc:7 Fi:9 Fs:1}



static void Test_BFu7c_BFu9i_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu1s");
    static STRUCT_IF_C BFu7c_BFu9i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu1s, BFu7c_BFu9i_BFu1s)
//============================================================================


struct  BFu7c_BFu9i_BFu31i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu9i_BFu31i) C1{ Fc:7 Fi:9 Fi:31}



static void Test_BFu7c_BFu9i_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu31i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu9i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu9i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu31i, BFu7c_BFu9i_BFu31i)
//============================================================================


struct  BFu7c_BFu9i_BFu31ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu9i_BFu31ll) C1{ Fc:7 Fi:9 FL:31}



static void Test_BFu7c_BFu9i_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7c_BFu9i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu9i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu31ll, BFu7c_BFu9i_BFu31ll)
//============================================================================


struct  BFu7c_BFu9i_BFu32i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu9i_BFu32i) C1{ Fc:7 Fi:9 Fi:32}



static void Test_BFu7c_BFu9i_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu32i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu9i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu9i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu32i, BFu7c_BFu9i_BFu32i)
//============================================================================


struct  BFu7c_BFu9i_BFu32ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu9i_BFu32ll) C1{ Fc:7 Fi:9 FL:32}



static void Test_BFu7c_BFu9i_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7c_BFu9i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu9i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu32ll, BFu7c_BFu9i_BFu32ll)
//============================================================================


struct  BFu7c_BFu9i_BFu33  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu9i_BFu33) C1{ Fc:7 Fi:9 FL:33}



static void Test_BFu7c_BFu9i_BFu33()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu33");
    static STRUCT_IF_C BFu7c_BFu9i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7c_BFu9i_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu9i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu33, BFu7c_BFu9i_BFu33)
//============================================================================


struct  BFu7c_BFu9i_BFu7c  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu9i_BFu7c) C1{ Fc:7 Fi:9 Fc:7}



static void Test_BFu7c_BFu9i_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu7c");
    static STRUCT_IF_C BFu7c_BFu9i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu7c, BFu7c_BFu9i_BFu7c)
//============================================================================


struct  BFu7c_BFu9i_BFu7i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu9i_BFu7i) C1{ Fc:7 Fi:9 Fi:7}



static void Test_BFu7c_BFu9i_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu7i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9i_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu7i, BFu7c_BFu9i_BFu7i)
//============================================================================


struct  BFu7c_BFu9i_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu9i_BFu7ll) C1{ Fc:7 Fi:9 FL:7}



static void Test_BFu7c_BFu9i_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu7ll, BFu7c_BFu9i_BFu7ll)
//============================================================================


struct  BFu7c_BFu9i_BFu7s  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu9i_BFu7s) C1{ Fc:7 Fi:9 Fs:7}



static void Test_BFu7c_BFu9i_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu7s");
    static STRUCT_IF_C BFu7c_BFu9i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu7s, BFu7c_BFu9i_BFu7s)
//============================================================================


struct  BFu7c_BFu9i_BFu8c  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu9i_BFu8c) C1{ Fc:7 Fi:9 Fc:8}



static void Test_BFu7c_BFu9i_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu8c");
    static STRUCT_IF_C BFu7c_BFu9i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9i_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu8c, BFu7c_BFu9i_BFu8c)
//============================================================================


struct  BFu7c_BFu9i_BFu8i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu9i_BFu8i) C1{ Fc:7 Fi:9 Fi:8}



static void Test_BFu7c_BFu9i_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu8i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9i_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu8i, BFu7c_BFu9i_BFu8i)
//============================================================================


struct  BFu7c_BFu9i_BFu8ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu9i_BFu8ll) C1{ Fc:7 Fi:9 FL:8}



static void Test_BFu7c_BFu9i_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu8ll, BFu7c_BFu9i_BFu8ll)
//============================================================================


struct  BFu7c_BFu9i_BFu8s  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu9i_BFu8s) C1{ Fc:7 Fi:9 Fs:8}



static void Test_BFu7c_BFu9i_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu8s");
    static STRUCT_IF_C BFu7c_BFu9i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9i_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu8s, BFu7c_BFu9i_BFu8s)
//============================================================================


struct  BFu7c_BFu9i_BFu9i  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu9i_BFu9i) C1{ Fc:7 Fi:9 Fi:9}



static void Test_BFu7c_BFu9i_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu9i");
    static STRUCT_IF_C BFu7c_BFu9i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9i_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu9i, BFu7c_BFu9i_BFu9i)
//============================================================================


struct  BFu7c_BFu9i_BFu9ll  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu9i_BFu9ll) C1{ Fc:7 Fi:9 FL:9}



static void Test_BFu7c_BFu9i_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu9i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu9ll, BFu7c_BFu9i_BFu9ll)
//============================================================================


struct  BFu7c_BFu9i_BFu9s  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu9i_BFu9s) C1{ Fc:7 Fi:9 Fs:9}



static void Test_BFu7c_BFu9i_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu9i_BFu9s");
    static STRUCT_IF_C BFu7c_BFu9i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_BFu9s, BFu7c_BFu9i_BFu9s)
//============================================================================


struct  BFu7c_BFu9i_C  {
  unsigned char v1:7;
  unsigned int v2:9;
  char v3;
};
//SIG(1 BFu7c_BFu9i_C) C1{ Fc:7 Fi:9 Fc}



static void Test_BFu7c_BFu9i_C()
{
  {
    init_simple_test("BFu7c_BFu9i_C");
    static STRUCT_IF_C BFu7c_BFu9i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_C, BFu7c_BFu9i_C)
//============================================================================


struct  BFu7c_BFu9i_D  {
  unsigned char v1:7;
  unsigned int v2:9;
  double v3;
};
//SIG(1 BFu7c_BFu9i_D) C1{ Fc:7 Fi:9 FL}



static void Test_BFu7c_BFu9i_D()
{
  {
    init_simple_test("BFu7c_BFu9i_D");
    static STRUCT_IF_C BFu7c_BFu9i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_D, BFu7c_BFu9i_D)
//============================================================================


struct  BFu7c_BFu9i_F  {
  unsigned char v1:7;
  unsigned int v2:9;
  float v3;
};
//SIG(1 BFu7c_BFu9i_F) C1{ Fc:7 Fi:9 Fi}



static void Test_BFu7c_BFu9i_F()
{
  {
    init_simple_test("BFu7c_BFu9i_F");
    static STRUCT_IF_C BFu7c_BFu9i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_F, BFu7c_BFu9i_F)
//============================================================================


struct  BFu7c_BFu9i_I  {
  unsigned char v1:7;
  unsigned int v2:9;
  int v3;
};
//SIG(1 BFu7c_BFu9i_I) C1{ Fc:7 Fi:9 Fi}



static void Test_BFu7c_BFu9i_I()
{
  {
    init_simple_test("BFu7c_BFu9i_I");
    static STRUCT_IF_C BFu7c_BFu9i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_I, BFu7c_BFu9i_I)
//============================================================================


struct  BFu7c_BFu9i_Ip  {
  unsigned char v1:7;
  unsigned int v2:9;
  int *v3;
};
//SIG(1 BFu7c_BFu9i_Ip) C1{ Fc:7 Fi:9 Fp}



static void Test_BFu7c_BFu9i_Ip()
{
  {
    init_simple_test("BFu7c_BFu9i_Ip");
    static STRUCT_IF_C BFu7c_BFu9i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu9i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_Ip, BFu7c_BFu9i_Ip)
//============================================================================


struct  BFu7c_BFu9i_L  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu9i_L) C1{ Fc:7 Fi:9 FL}



static void Test_BFu7c_BFu9i_L()
{
  {
    init_simple_test("BFu7c_BFu9i_L");
    static STRUCT_IF_C BFu7c_BFu9i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_L, BFu7c_BFu9i_L)
//============================================================================


struct  BFu7c_BFu9i_S  {
  unsigned char v1:7;
  unsigned int v2:9;
  short v3;
};
//SIG(1 BFu7c_BFu9i_S) C1{ Fc:7 Fi:9 Fs}



static void Test_BFu7c_BFu9i_S()
{
  {
    init_simple_test("BFu7c_BFu9i_S");
    static STRUCT_IF_C BFu7c_BFu9i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_S, BFu7c_BFu9i_S)
//============================================================================


struct  BFu7c_BFu9i_Uc  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu9i_Uc) C1{ Fc:7 Fi:9 Fc}



static void Test_BFu7c_BFu9i_Uc()
{
  {
    init_simple_test("BFu7c_BFu9i_Uc");
    static STRUCT_IF_C BFu7c_BFu9i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_Uc, BFu7c_BFu9i_Uc)
//============================================================================


struct  BFu7c_BFu9i_Ui  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu9i_Ui) C1{ Fc:7 Fi:9 Fi}



static void Test_BFu7c_BFu9i_Ui()
{
  {
    init_simple_test("BFu7c_BFu9i_Ui");
    static STRUCT_IF_C BFu7c_BFu9i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_Ui, BFu7c_BFu9i_Ui)
//============================================================================


struct  BFu7c_BFu9i_Ul  {
  unsigned char v1:7;
  unsigned int v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu9i_Ul) C1{ Fc:7 Fi:9 FL}



static void Test_BFu7c_BFu9i_Ul()
{
  {
    init_simple_test("BFu7c_BFu9i_Ul");
    static STRUCT_IF_C BFu7c_BFu9i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_Ul, BFu7c_BFu9i_Ul)
//============================================================================


struct  BFu7c_BFu9i_Us  {
  unsigned char v1:7;
  unsigned int v2:9;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu9i_Us) C1{ Fc:7 Fi:9 Fs}



static void Test_BFu7c_BFu9i_Us()
{
  {
    init_simple_test("BFu7c_BFu9i_Us");
    static STRUCT_IF_C BFu7c_BFu9i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_Us, BFu7c_BFu9i_Us)
//============================================================================


struct  BFu7c_BFu9i_Vp  {
  unsigned char v1:7;
  unsigned int v2:9;
  void *v3;
};
//SIG(1 BFu7c_BFu9i_Vp) C1{ Fc:7 Fi:9 Fp}



static void Test_BFu7c_BFu9i_Vp()
{
  {
    init_simple_test("BFu7c_BFu9i_Vp");
    static STRUCT_IF_C BFu7c_BFu9i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu9i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9i_Vp, BFu7c_BFu9i_Vp)
//============================================================================


struct  BFu7c_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
};
//SIG(1 BFu7c_BFu9ll) C1{ Fc:7 FL:9}



static void Test_BFu7c_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll, BFu7c_BFu9ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu15i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu9ll_BFu15i) C1{ Fc:7 FL:9 Fi:15}



static void Test_BFu7c_BFu9ll_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu15i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9ll_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu15i, BFu7c_BFu9ll_BFu15i)
//============================================================================


struct  BFu7c_BFu9ll_BFu15ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu9ll_BFu15ll) C1{ Fc:7 FL:9 FL:15}



static void Test_BFu7c_BFu9ll_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu15ll, BFu7c_BFu9ll_BFu15ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu15s  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu9ll_BFu15s) C1{ Fc:7 FL:9 Fs:15}



static void Test_BFu7c_BFu9ll_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu15s");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu15s, BFu7c_BFu9ll_BFu15s)
//============================================================================


struct  BFu7c_BFu9ll_BFu16i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu9ll_BFu16i) C1{ Fc:7 FL:9 Fi:16}



static void Test_BFu7c_BFu9ll_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu16i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9ll_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu16i, BFu7c_BFu9ll_BFu16i)
//============================================================================


struct  BFu7c_BFu9ll_BFu16ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu9ll_BFu16ll) C1{ Fc:7 FL:9 FL:16}



static void Test_BFu7c_BFu9ll_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu16ll, BFu7c_BFu9ll_BFu16ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu16s  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu9ll_BFu16s) C1{ Fc:7 FL:9 Fs:16}



static void Test_BFu7c_BFu9ll_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu16s");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu16s, BFu7c_BFu9ll_BFu16s)
//============================================================================


struct  BFu7c_BFu9ll_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu9ll_BFu17i) C1{ Fc:7 FL:9 Fi:17}



static void Test_BFu7c_BFu9ll_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu17i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu9ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu9ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu17i, BFu7c_BFu9ll_BFu17i)
//============================================================================


struct  BFu7c_BFu9ll_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu9ll_BFu17ll) C1{ Fc:7 FL:9 FL:17}



static void Test_BFu7c_BFu9ll_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7c_BFu9ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu9ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu17ll, BFu7c_BFu9ll_BFu17ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu1c  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu9ll_BFu1c) C1{ Fc:7 FL:9 Fc:1}



static void Test_BFu7c_BFu9ll_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu1c");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu1c, BFu7c_BFu9ll_BFu1c)
//============================================================================


struct  BFu7c_BFu9ll_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu9ll_BFu1i) C1{ Fc:7 FL:9 Fi:1}



static void Test_BFu7c_BFu9ll_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu1i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu1i, BFu7c_BFu9ll_BFu1i)
//============================================================================


struct  BFu7c_BFu9ll_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu9ll_BFu1ll) C1{ Fc:7 FL:9 FL:1}



static void Test_BFu7c_BFu9ll_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu1ll, BFu7c_BFu9ll_BFu1ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu9ll_BFu1s) C1{ Fc:7 FL:9 Fs:1}



static void Test_BFu7c_BFu9ll_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu1s");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu1s, BFu7c_BFu9ll_BFu1s)
//============================================================================


struct  BFu7c_BFu9ll_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu9ll_BFu31i) C1{ Fc:7 FL:9 Fi:31}



static void Test_BFu7c_BFu9ll_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu31i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu9ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu9ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu31i, BFu7c_BFu9ll_BFu31i)
//============================================================================


struct  BFu7c_BFu9ll_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu9ll_BFu31ll) C1{ Fc:7 FL:9 FL:31}



static void Test_BFu7c_BFu9ll_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7c_BFu9ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu9ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu31ll, BFu7c_BFu9ll_BFu31ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu9ll_BFu32i) C1{ Fc:7 FL:9 Fi:32}



static void Test_BFu7c_BFu9ll_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu32i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu9ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu9ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu32i, BFu7c_BFu9ll_BFu32i)
//============================================================================


struct  BFu7c_BFu9ll_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu9ll_BFu32ll) C1{ Fc:7 FL:9 FL:32}



static void Test_BFu7c_BFu9ll_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7c_BFu9ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu9ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu32ll, BFu7c_BFu9ll_BFu32ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu33  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu9ll_BFu33) C1{ Fc:7 FL:9 FL:33}



static void Test_BFu7c_BFu9ll_BFu33()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu33");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7c_BFu9ll_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu9ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu33, BFu7c_BFu9ll_BFu33)
//============================================================================


struct  BFu7c_BFu9ll_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu9ll_BFu7c) C1{ Fc:7 FL:9 Fc:7}



static void Test_BFu7c_BFu9ll_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu7c");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu7c, BFu7c_BFu9ll_BFu7c)
//============================================================================


struct  BFu7c_BFu9ll_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu9ll_BFu7i) C1{ Fc:7 FL:9 Fi:7}



static void Test_BFu7c_BFu9ll_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu7i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu7i, BFu7c_BFu9ll_BFu7i)
//============================================================================


struct  BFu7c_BFu9ll_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu9ll_BFu7ll) C1{ Fc:7 FL:9 FL:7}



static void Test_BFu7c_BFu9ll_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu7ll, BFu7c_BFu9ll_BFu7ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu9ll_BFu7s) C1{ Fc:7 FL:9 Fs:7}



static void Test_BFu7c_BFu9ll_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu7s");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu7s, BFu7c_BFu9ll_BFu7s)
//============================================================================


struct  BFu7c_BFu9ll_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu9ll_BFu8c) C1{ Fc:7 FL:9 Fc:8}



static void Test_BFu7c_BFu9ll_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu8c");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9ll_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu8c, BFu7c_BFu9ll_BFu8c)
//============================================================================


struct  BFu7c_BFu9ll_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu9ll_BFu8i) C1{ Fc:7 FL:9 Fi:8}



static void Test_BFu7c_BFu9ll_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu8i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu8i, BFu7c_BFu9ll_BFu8i)
//============================================================================


struct  BFu7c_BFu9ll_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu9ll_BFu8ll) C1{ Fc:7 FL:9 FL:8}



static void Test_BFu7c_BFu9ll_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu8ll, BFu7c_BFu9ll_BFu8ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu9ll_BFu8s) C1{ Fc:7 FL:9 Fs:8}



static void Test_BFu7c_BFu9ll_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu8s");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu8s, BFu7c_BFu9ll_BFu8s)
//============================================================================


struct  BFu7c_BFu9ll_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu9ll_BFu9i) C1{ Fc:7 FL:9 Fi:9}



static void Test_BFu7c_BFu9ll_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu9i");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu9i, BFu7c_BFu9ll_BFu9i)
//============================================================================


struct  BFu7c_BFu9ll_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu9ll_BFu9ll) C1{ Fc:7 FL:9 FL:9}



static void Test_BFu7c_BFu9ll_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu9ll, BFu7c_BFu9ll_BFu9ll)
//============================================================================


struct  BFu7c_BFu9ll_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu9ll_BFu9s) C1{ Fc:7 FL:9 Fs:9}



static void Test_BFu7c_BFu9ll_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu9ll_BFu9s");
    static STRUCT_IF_C BFu7c_BFu9ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_BFu9s, BFu7c_BFu9ll_BFu9s)
//============================================================================


struct  BFu7c_BFu9ll_C  {
  unsigned char v1:7;
  __tsu64 v2:9;
  char v3;
};
//SIG(1 BFu7c_BFu9ll_C) C1{ Fc:7 FL:9 Fc}



static void Test_BFu7c_BFu9ll_C()
{
  {
    init_simple_test("BFu7c_BFu9ll_C");
    static STRUCT_IF_C BFu7c_BFu9ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_C, BFu7c_BFu9ll_C)
//============================================================================


struct  BFu7c_BFu9ll_D  {
  unsigned char v1:7;
  __tsu64 v2:9;
  double v3;
};
//SIG(1 BFu7c_BFu9ll_D) C1{ Fc:7 FL:9 FL}



static void Test_BFu7c_BFu9ll_D()
{
  {
    init_simple_test("BFu7c_BFu9ll_D");
    static STRUCT_IF_C BFu7c_BFu9ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_D, BFu7c_BFu9ll_D)
//============================================================================


struct  BFu7c_BFu9ll_F  {
  unsigned char v1:7;
  __tsu64 v2:9;
  float v3;
};
//SIG(1 BFu7c_BFu9ll_F) C1{ Fc:7 FL:9 Fi}



static void Test_BFu7c_BFu9ll_F()
{
  {
    init_simple_test("BFu7c_BFu9ll_F");
    static STRUCT_IF_C BFu7c_BFu9ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_F, BFu7c_BFu9ll_F)
//============================================================================


struct  BFu7c_BFu9ll_I  {
  unsigned char v1:7;
  __tsu64 v2:9;
  int v3;
};
//SIG(1 BFu7c_BFu9ll_I) C1{ Fc:7 FL:9 Fi}



static void Test_BFu7c_BFu9ll_I()
{
  {
    init_simple_test("BFu7c_BFu9ll_I");
    static STRUCT_IF_C BFu7c_BFu9ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_I, BFu7c_BFu9ll_I)
//============================================================================


struct  BFu7c_BFu9ll_Ip  {
  unsigned char v1:7;
  __tsu64 v2:9;
  int *v3;
};
//SIG(1 BFu7c_BFu9ll_Ip) C1{ Fc:7 FL:9 Fp}



static void Test_BFu7c_BFu9ll_Ip()
{
  {
    init_simple_test("BFu7c_BFu9ll_Ip");
    static STRUCT_IF_C BFu7c_BFu9ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu9ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_Ip, BFu7c_BFu9ll_Ip)
//============================================================================


struct  BFu7c_BFu9ll_L  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu9ll_L) C1{ Fc:7 FL:9 FL}



static void Test_BFu7c_BFu9ll_L()
{
  {
    init_simple_test("BFu7c_BFu9ll_L");
    static STRUCT_IF_C BFu7c_BFu9ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_L, BFu7c_BFu9ll_L)
//============================================================================


struct  BFu7c_BFu9ll_S  {
  unsigned char v1:7;
  __tsu64 v2:9;
  short v3;
};
//SIG(1 BFu7c_BFu9ll_S) C1{ Fc:7 FL:9 Fs}



static void Test_BFu7c_BFu9ll_S()
{
  {
    init_simple_test("BFu7c_BFu9ll_S");
    static STRUCT_IF_C BFu7c_BFu9ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_S, BFu7c_BFu9ll_S)
//============================================================================


struct  BFu7c_BFu9ll_Uc  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu9ll_Uc) C1{ Fc:7 FL:9 Fc}



static void Test_BFu7c_BFu9ll_Uc()
{
  {
    init_simple_test("BFu7c_BFu9ll_Uc");
    static STRUCT_IF_C BFu7c_BFu9ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_Uc, BFu7c_BFu9ll_Uc)
//============================================================================


struct  BFu7c_BFu9ll_Ui  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu9ll_Ui) C1{ Fc:7 FL:9 Fi}



static void Test_BFu7c_BFu9ll_Ui()
{
  {
    init_simple_test("BFu7c_BFu9ll_Ui");
    static STRUCT_IF_C BFu7c_BFu9ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_Ui, BFu7c_BFu9ll_Ui)
//============================================================================


struct  BFu7c_BFu9ll_Ul  {
  unsigned char v1:7;
  __tsu64 v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu9ll_Ul) C1{ Fc:7 FL:9 FL}



static void Test_BFu7c_BFu9ll_Ul()
{
  {
    init_simple_test("BFu7c_BFu9ll_Ul");
    static STRUCT_IF_C BFu7c_BFu9ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_Ul, BFu7c_BFu9ll_Ul)
//============================================================================


struct  BFu7c_BFu9ll_Us  {
  unsigned char v1:7;
  __tsu64 v2:9;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu9ll_Us) C1{ Fc:7 FL:9 Fs}



static void Test_BFu7c_BFu9ll_Us()
{
  {
    init_simple_test("BFu7c_BFu9ll_Us");
    static STRUCT_IF_C BFu7c_BFu9ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_Us, BFu7c_BFu9ll_Us)
//============================================================================


struct  BFu7c_BFu9ll_Vp  {
  unsigned char v1:7;
  __tsu64 v2:9;
  void *v3;
};
//SIG(1 BFu7c_BFu9ll_Vp) C1{ Fc:7 FL:9 Fp}



static void Test_BFu7c_BFu9ll_Vp()
{
  {
    init_simple_test("BFu7c_BFu9ll_Vp");
    static STRUCT_IF_C BFu7c_BFu9ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu9ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9ll_Vp, BFu7c_BFu9ll_Vp)
//============================================================================


struct  BFu7c_BFu9s  {
  unsigned char v1:7;
  unsigned short v2:9;
};
//SIG(1 BFu7c_BFu9s) C1{ Fc:7 Fs:9}



static void Test_BFu7c_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu9s");
    static STRUCT_IF_C BFu7c_BFu9s lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s, BFu7c_BFu9s)
//============================================================================


struct  BFu7c_BFu9s_BFu15i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:15;
};
//SIG(1 BFu7c_BFu9s_BFu15i) C1{ Fc:7 Fs:9 Fi:15}



static void Test_BFu7c_BFu9s_BFu15i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu15i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9s_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu15i, BFu7c_BFu9s_BFu15i)
//============================================================================


struct  BFu7c_BFu9s_BFu15ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_BFu9s_BFu15ll) C1{ Fc:7 Fs:9 FL:15}



static void Test_BFu7c_BFu9s_BFu15ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu15ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9s_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu15ll, BFu7c_BFu9s_BFu15ll)
//============================================================================


struct  BFu7c_BFu9s_BFu15s  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned short v3:15;
};
//SIG(1 BFu7c_BFu9s_BFu15s) C1{ Fc:7 Fs:9 Fs:15}



static void Test_BFu7c_BFu9s_BFu15s()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu15s");
    static STRUCT_IF_C BFu7c_BFu9s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_BFu9s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_BFu9s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu15s, BFu7c_BFu9s_BFu15s)
//============================================================================


struct  BFu7c_BFu9s_BFu16i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:16;
};
//SIG(1 BFu7c_BFu9s_BFu16i) C1{ Fc:7 Fs:9 Fi:16}



static void Test_BFu7c_BFu9s_BFu16i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu16i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9s_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu16i, BFu7c_BFu9s_BFu16i)
//============================================================================


struct  BFu7c_BFu9s_BFu16ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_BFu9s_BFu16ll) C1{ Fc:7 Fs:9 FL:16}



static void Test_BFu7c_BFu9s_BFu16ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu16ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9s_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu16ll, BFu7c_BFu9s_BFu16ll)
//============================================================================


struct  BFu7c_BFu9s_BFu16s  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned short v3:16;
};
//SIG(1 BFu7c_BFu9s_BFu16s) C1{ Fc:7 Fs:9 Fs:16}



static void Test_BFu7c_BFu9s_BFu16s()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu16s");
    static STRUCT_IF_C BFu7c_BFu9s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_BFu9s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_BFu9s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu16s, BFu7c_BFu9s_BFu16s)
//============================================================================


struct  BFu7c_BFu9s_BFu17i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:17;
};
//SIG(1 BFu7c_BFu9s_BFu17i) C1{ Fc:7 Fs:9 Fi:17}



static void Test_BFu7c_BFu9s_BFu17i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu17i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_BFu9s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu9s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu17i, BFu7c_BFu9s_BFu17i)
//============================================================================


struct  BFu7c_BFu9s_BFu17ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_BFu9s_BFu17ll) C1{ Fc:7 Fs:9 FL:17}



static void Test_BFu7c_BFu9s_BFu17ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu17ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7c_BFu9s_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7c_BFu9s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu17ll, BFu7c_BFu9s_BFu17ll)
//============================================================================


struct  BFu7c_BFu9s_BFu1c  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned char v3:1;
};
//SIG(1 BFu7c_BFu9s_BFu1c) C1{ Fc:7 Fs:9 Fc:1}



static void Test_BFu7c_BFu9s_BFu1c()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu1c");
    static STRUCT_IF_C BFu7c_BFu9s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu1c");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu1c, BFu7c_BFu9s_BFu1c)
//============================================================================


struct  BFu7c_BFu9s_BFu1i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:1;
};
//SIG(1 BFu7c_BFu9s_BFu1i) C1{ Fc:7 Fs:9 Fi:1}



static void Test_BFu7c_BFu9s_BFu1i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu1i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu1i");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu1i, BFu7c_BFu9s_BFu1i)
//============================================================================


struct  BFu7c_BFu9s_BFu1ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_BFu9s_BFu1ll) C1{ Fc:7 Fs:9 FL:1}



static void Test_BFu7c_BFu9s_BFu1ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu1ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu1ll");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu1ll, BFu7c_BFu9s_BFu1ll)
//============================================================================


struct  BFu7c_BFu9s_BFu1s  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned short v3:1;
};
//SIG(1 BFu7c_BFu9s_BFu1s) C1{ Fc:7 Fs:9 Fs:1}



static void Test_BFu7c_BFu9s_BFu1s()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu1s");
    static STRUCT_IF_C BFu7c_BFu9s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu1s");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_BFu9s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu1s, BFu7c_BFu9s_BFu1s)
//============================================================================


struct  BFu7c_BFu9s_BFu31i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:31;
};
//SIG(1 BFu7c_BFu9s_BFu31i) C1{ Fc:7 Fs:9 Fi:31}



static void Test_BFu7c_BFu9s_BFu31i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu31i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_BFu9s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu9s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu31i, BFu7c_BFu9s_BFu31i)
//============================================================================


struct  BFu7c_BFu9s_BFu31ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_BFu9s_BFu31ll) C1{ Fc:7 Fs:9 FL:31}



static void Test_BFu7c_BFu9s_BFu31ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu31ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7c_BFu9s_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7c_BFu9s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu31ll, BFu7c_BFu9s_BFu31ll)
//============================================================================


struct  BFu7c_BFu9s_BFu32i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:32;
};
//SIG(1 BFu7c_BFu9s_BFu32i) C1{ Fc:7 Fs:9 Fi:32}



static void Test_BFu7c_BFu9s_BFu32i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu32i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_BFu9s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu9s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu32i, BFu7c_BFu9s_BFu32i)
//============================================================================


struct  BFu7c_BFu9s_BFu32ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_BFu9s_BFu32ll) C1{ Fc:7 Fs:9 FL:32}



static void Test_BFu7c_BFu9s_BFu32ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu32ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7c_BFu9s_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7c_BFu9s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu32ll, BFu7c_BFu9s_BFu32ll)
//============================================================================


struct  BFu7c_BFu9s_BFu33  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_BFu9s_BFu33) C1{ Fc:7 Fs:9 FL:33}



static void Test_BFu7c_BFu9s_BFu33()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu33");
    static STRUCT_IF_C BFu7c_BFu9s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7c_BFu9s_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7c_BFu9s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu33, BFu7c_BFu9s_BFu33)
//============================================================================


struct  BFu7c_BFu9s_BFu7c  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned char v3:7;
};
//SIG(1 BFu7c_BFu9s_BFu7c) C1{ Fc:7 Fs:9 Fc:7}



static void Test_BFu7c_BFu9s_BFu7c()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu7c");
    static STRUCT_IF_C BFu7c_BFu9s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu7c, BFu7c_BFu9s_BFu7c)
//============================================================================


struct  BFu7c_BFu9s_BFu7i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:7;
};
//SIG(1 BFu7c_BFu9s_BFu7i) C1{ Fc:7 Fs:9 Fi:7}



static void Test_BFu7c_BFu9s_BFu7i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu7i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu7i, BFu7c_BFu9s_BFu7i)
//============================================================================


struct  BFu7c_BFu9s_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_BFu9s_BFu7ll) C1{ Fc:7 Fs:9 FL:7}



static void Test_BFu7c_BFu9s_BFu7ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu7ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu7ll, BFu7c_BFu9s_BFu7ll)
//============================================================================


struct  BFu7c_BFu9s_BFu7s  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned short v3:7;
};
//SIG(1 BFu7c_BFu9s_BFu7s) C1{ Fc:7 Fs:9 Fs:7}



static void Test_BFu7c_BFu9s_BFu7s()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu7s");
    static STRUCT_IF_C BFu7c_BFu9s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_BFu9s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu7s, BFu7c_BFu9s_BFu7s)
//============================================================================


struct  BFu7c_BFu9s_BFu8c  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned char v3:8;
};
//SIG(1 BFu7c_BFu9s_BFu8c) C1{ Fc:7 Fs:9 Fc:8}



static void Test_BFu7c_BFu9s_BFu8c()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu8c");
    static STRUCT_IF_C BFu7c_BFu9s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9s_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu8c, BFu7c_BFu9s_BFu8c)
//============================================================================


struct  BFu7c_BFu9s_BFu8i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:8;
};
//SIG(1 BFu7c_BFu9s_BFu8i) C1{ Fc:7 Fs:9 Fi:8}



static void Test_BFu7c_BFu9s_BFu8i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu8i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9s_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu8i, BFu7c_BFu9s_BFu8i)
//============================================================================


struct  BFu7c_BFu9s_BFu8ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_BFu9s_BFu8ll) C1{ Fc:7 Fs:9 FL:8}



static void Test_BFu7c_BFu9s_BFu8ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu8ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9s_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu8ll, BFu7c_BFu9s_BFu8ll)
//============================================================================


struct  BFu7c_BFu9s_BFu8s  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned short v3:8;
};
//SIG(1 BFu7c_BFu9s_BFu8s) C1{ Fc:7 Fs:9 Fs:8}



static void Test_BFu7c_BFu9s_BFu8s()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu8s");
    static STRUCT_IF_C BFu7c_BFu9s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_BFu9s_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_BFu9s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu8s, BFu7c_BFu9s_BFu8s)
//============================================================================


struct  BFu7c_BFu9s_BFu9i  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3:9;
};
//SIG(1 BFu7c_BFu9s_BFu9i) C1{ Fc:7 Fs:9 Fi:9}



static void Test_BFu7c_BFu9s_BFu9i()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu9i");
    static STRUCT_IF_C BFu7c_BFu9s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9s_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu9i, BFu7c_BFu9s_BFu9i)
//============================================================================


struct  BFu7c_BFu9s_BFu9ll  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_BFu9s_BFu9ll) C1{ Fc:7 Fs:9 FL:9}



static void Test_BFu7c_BFu9s_BFu9ll()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu9ll");
    static STRUCT_IF_C BFu7c_BFu9s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_BFu9s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9s_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu9ll, BFu7c_BFu9s_BFu9ll)
//============================================================================


struct  BFu7c_BFu9s_BFu9s  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned short v3:9;
};
//SIG(1 BFu7c_BFu9s_BFu9s) C1{ Fc:7 Fs:9 Fs:9}



static void Test_BFu7c_BFu9s_BFu9s()
{
  {
    init_simple_test("BFu7c_BFu9s_BFu9s");
    static STRUCT_IF_C BFu7c_BFu9s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_BFu9s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_BFu9s, BFu7c_BFu9s_BFu9s)
//============================================================================


struct  BFu7c_BFu9s_C  {
  unsigned char v1:7;
  unsigned short v2:9;
  char v3;
};
//SIG(1 BFu7c_BFu9s_C) C1{ Fc:7 Fs:9 Fc}



static void Test_BFu7c_BFu9s_C()
{
  {
    init_simple_test("BFu7c_BFu9s_C");
    static STRUCT_IF_C BFu7c_BFu9s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_C");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_C");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_C, BFu7c_BFu9s_C)
//============================================================================


struct  BFu7c_BFu9s_D  {
  unsigned char v1:7;
  unsigned short v2:9;
  double v3;
};
//SIG(1 BFu7c_BFu9s_D) C1{ Fc:7 Fs:9 FL}



static void Test_BFu7c_BFu9s_D()
{
  {
    init_simple_test("BFu7c_BFu9s_D");
    static STRUCT_IF_C BFu7c_BFu9s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_D");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_D, BFu7c_BFu9s_D)
//============================================================================


struct  BFu7c_BFu9s_F  {
  unsigned char v1:7;
  unsigned short v2:9;
  float v3;
};
//SIG(1 BFu7c_BFu9s_F) C1{ Fc:7 Fs:9 Fi}



static void Test_BFu7c_BFu9s_F()
{
  {
    init_simple_test("BFu7c_BFu9s_F");
    static STRUCT_IF_C BFu7c_BFu9s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_F");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_F");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_F, BFu7c_BFu9s_F)
//============================================================================


struct  BFu7c_BFu9s_I  {
  unsigned char v1:7;
  unsigned short v2:9;
  int v3;
};
//SIG(1 BFu7c_BFu9s_I) C1{ Fc:7 Fs:9 Fi}



static void Test_BFu7c_BFu9s_I()
{
  {
    init_simple_test("BFu7c_BFu9s_I");
    static STRUCT_IF_C BFu7c_BFu9s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_I");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_I");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_I, BFu7c_BFu9s_I)
//============================================================================


struct  BFu7c_BFu9s_Ip  {
  unsigned char v1:7;
  unsigned short v2:9;
  int *v3;
};
//SIG(1 BFu7c_BFu9s_Ip) C1{ Fc:7 Fs:9 Fp}



static void Test_BFu7c_BFu9s_Ip()
{
  {
    init_simple_test("BFu7c_BFu9s_Ip");
    static STRUCT_IF_C BFu7c_BFu9s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu9s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_Ip, BFu7c_BFu9s_Ip)
//============================================================================


struct  BFu7c_BFu9s_L  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsi64 v3;
};
//SIG(1 BFu7c_BFu9s_L) C1{ Fc:7 Fs:9 FL}



static void Test_BFu7c_BFu9s_L()
{
  {
    init_simple_test("BFu7c_BFu9s_L");
    static STRUCT_IF_C BFu7c_BFu9s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_L");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_L, BFu7c_BFu9s_L)
//============================================================================


struct  BFu7c_BFu9s_S  {
  unsigned char v1:7;
  unsigned short v2:9;
  short v3;
};
//SIG(1 BFu7c_BFu9s_S) C1{ Fc:7 Fs:9 Fs}



static void Test_BFu7c_BFu9s_S()
{
  {
    init_simple_test("BFu7c_BFu9s_S");
    static STRUCT_IF_C BFu7c_BFu9s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_S");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_S");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_S, BFu7c_BFu9s_S)
//============================================================================


struct  BFu7c_BFu9s_Uc  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned char v3;
};
//SIG(1 BFu7c_BFu9s_Uc) C1{ Fc:7 Fs:9 Fc}



static void Test_BFu7c_BFu9s_Uc()
{
  {
    init_simple_test("BFu7c_BFu9s_Uc");
    static STRUCT_IF_C BFu7c_BFu9s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_Uc");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_Uc, BFu7c_BFu9s_Uc)
//============================================================================


struct  BFu7c_BFu9s_Ui  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned int v3;
};
//SIG(1 BFu7c_BFu9s_Ui) C1{ Fc:7 Fs:9 Fi}



static void Test_BFu7c_BFu9s_Ui()
{
  {
    init_simple_test("BFu7c_BFu9s_Ui");
    static STRUCT_IF_C BFu7c_BFu9s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_BFu9s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_BFu9s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_Ui");
    check_field_offset(lv, v3, 4, "BFu7c_BFu9s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_Ui, BFu7c_BFu9s_Ui)
//============================================================================


struct  BFu7c_BFu9s_Ul  {
  unsigned char v1:7;
  unsigned short v2:9;
  __tsu64 v3;
};
//SIG(1 BFu7c_BFu9s_Ul) C1{ Fc:7 Fs:9 FL}



static void Test_BFu7c_BFu9s_Ul()
{
  {
    init_simple_test("BFu7c_BFu9s_Ul");
    static STRUCT_IF_C BFu7c_BFu9s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_BFu9s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_Ul");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_Ul, BFu7c_BFu9s_Ul)
//============================================================================


struct  BFu7c_BFu9s_Us  {
  unsigned char v1:7;
  unsigned short v2:9;
  unsigned short v3;
};
//SIG(1 BFu7c_BFu9s_Us) C1{ Fc:7 Fs:9 Fs}



static void Test_BFu7c_BFu9s_Us()
{
  {
    init_simple_test("BFu7c_BFu9s_Us");
    static STRUCT_IF_C BFu7c_BFu9s_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_BFu9s_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_BFu9s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_Us");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_Us");
    check_field_offset(lv, v3, 2, "BFu7c_BFu9s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_Us, BFu7c_BFu9s_Us)
//============================================================================


struct  BFu7c_BFu9s_Vp  {
  unsigned char v1:7;
  unsigned short v2:9;
  void *v3;
};
//SIG(1 BFu7c_BFu9s_Vp) C1{ Fc:7 Fs:9 Fp}



static void Test_BFu7c_BFu9s_Vp()
{
  {
    init_simple_test("BFu7c_BFu9s_Vp");
    static STRUCT_IF_C BFu7c_BFu9s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_BFu9s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_BFu9s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_BFu9s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, 1, "BFu7c_BFu9s_Vp");
    set_bf_and_test(lv, v2, 0, 7, 9, hide_ull(1LL<<8), "BFu7c_BFu9s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_BFu9s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_BFu9s_Vp, BFu7c_BFu9s_Vp)
//============================================================================


struct  BFu7c_C  {
  unsigned char v1:7;
  char v2;
};
//SIG(1 BFu7c_C) C1{ Fc:7 Fc}



static void Test_BFu7c_C()
{
  {
    init_simple_test("BFu7c_C");
    static STRUCT_IF_C BFu7c_C lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C");
    check_field_offset(lv, v2, 1, "BFu7c_C.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C, BFu7c_C)
//============================================================================


struct  BFu7c_C_BFu15i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_C_BFu15i) C1{ Fc:7 Fc Fi:15}



static void Test_BFu7c_C_BFu15i()
{
  {
    init_simple_test("BFu7c_C_BFu15i");
    static STRUCT_IF_C BFu7c_C_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu15i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_C_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_C_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu15i, BFu7c_C_BFu15i)
//============================================================================


struct  BFu7c_C_BFu15ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_C_BFu15ll) C1{ Fc:7 Fc FL:15}



static void Test_BFu7c_C_BFu15ll()
{
  {
    init_simple_test("BFu7c_C_BFu15ll");
    static STRUCT_IF_C BFu7c_C_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_C_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_C_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_C_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu15ll, BFu7c_C_BFu15ll)
//============================================================================


struct  BFu7c_C_BFu15s  {
  unsigned char v1:7;
  char v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_C_BFu15s) C1{ Fc:7 Fc Fs:15}



static void Test_BFu7c_C_BFu15s()
{
  {
    init_simple_test("BFu7c_C_BFu15s");
    static STRUCT_IF_C BFu7c_C_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_C_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu15s");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_C_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_C_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu15s, BFu7c_C_BFu15s)
//============================================================================


struct  BFu7c_C_BFu16i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_C_BFu16i) C1{ Fc:7 Fc Fi:16}



static void Test_BFu7c_C_BFu16i()
{
  {
    init_simple_test("BFu7c_C_BFu16i");
    static STRUCT_IF_C BFu7c_C_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu16i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_C_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_C_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu16i, BFu7c_C_BFu16i)
//============================================================================


struct  BFu7c_C_BFu16ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_C_BFu16ll) C1{ Fc:7 Fc FL:16}



static void Test_BFu7c_C_BFu16ll()
{
  {
    init_simple_test("BFu7c_C_BFu16ll");
    static STRUCT_IF_C BFu7c_C_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_C_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_C_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_C_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu16ll, BFu7c_C_BFu16ll)
//============================================================================


struct  BFu7c_C_BFu16s  {
  unsigned char v1:7;
  char v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_C_BFu16s) C1{ Fc:7 Fc Fs:16}



static void Test_BFu7c_C_BFu16s()
{
  {
    init_simple_test("BFu7c_C_BFu16s");
    static STRUCT_IF_C BFu7c_C_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_C_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu16s");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_C_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_C_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu16s, BFu7c_C_BFu16s)
//============================================================================


struct  BFu7c_C_BFu17i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_C_BFu17i) C1{ Fc:7 Fc Fi:17}



static void Test_BFu7c_C_BFu17i()
{
  {
    init_simple_test("BFu7c_C_BFu17i");
    static STRUCT_IF_C BFu7c_C_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu17i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_C_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_C_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu17i, BFu7c_C_BFu17i)
//============================================================================


struct  BFu7c_C_BFu17ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_C_BFu17ll) C1{ Fc:7 Fc FL:17}



static void Test_BFu7c_C_BFu17ll()
{
  {
    init_simple_test("BFu7c_C_BFu17ll");
    static STRUCT_IF_C BFu7c_C_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7c_C_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7c_C_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu17ll, BFu7c_C_BFu17ll)
//============================================================================


struct  BFu7c_C_BFu1c  {
  unsigned char v1:7;
  char v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_C_BFu1c) C1{ Fc:7 Fc Fc:1}



static void Test_BFu7c_C_BFu1c()
{
  {
    init_simple_test("BFu7c_C_BFu1c");
    static STRUCT_IF_C BFu7c_C_BFu1c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_C_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_C_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu1c");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_C_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu1c, BFu7c_C_BFu1c)
//============================================================================


struct  BFu7c_C_BFu1i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_C_BFu1i) C1{ Fc:7 Fc Fi:1}



static void Test_BFu7c_C_BFu1i()
{
  {
    init_simple_test("BFu7c_C_BFu1i");
    static STRUCT_IF_C BFu7c_C_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu1i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_C_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu1i, BFu7c_C_BFu1i)
//============================================================================


struct  BFu7c_C_BFu1ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_C_BFu1ll) C1{ Fc:7 Fc FL:1}



static void Test_BFu7c_C_BFu1ll()
{
  {
    init_simple_test("BFu7c_C_BFu1ll");
    static STRUCT_IF_C BFu7c_C_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_C_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_C_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu1ll, BFu7c_C_BFu1ll)
//============================================================================


struct  BFu7c_C_BFu1s  {
  unsigned char v1:7;
  char v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_C_BFu1s) C1{ Fc:7 Fc Fs:1}



static void Test_BFu7c_C_BFu1s()
{
  {
    init_simple_test("BFu7c_C_BFu1s");
    static STRUCT_IF_C BFu7c_C_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_C_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu1s");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_C_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu1s, BFu7c_C_BFu1s)
//============================================================================


struct  BFu7c_C_BFu31i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_C_BFu31i) C1{ Fc:7 Fc Fi:31}



static void Test_BFu7c_C_BFu31i()
{
  {
    init_simple_test("BFu7c_C_BFu31i");
    static STRUCT_IF_C BFu7c_C_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu31i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_C_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_C_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu31i, BFu7c_C_BFu31i)
//============================================================================


struct  BFu7c_C_BFu31ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_C_BFu31ll) C1{ Fc:7 Fc FL:31}



static void Test_BFu7c_C_BFu31ll()
{
  {
    init_simple_test("BFu7c_C_BFu31ll");
    static STRUCT_IF_C BFu7c_C_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7c_C_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7c_C_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu31ll, BFu7c_C_BFu31ll)
//============================================================================


struct  BFu7c_C_BFu32i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_C_BFu32i) C1{ Fc:7 Fc Fi:32}



static void Test_BFu7c_C_BFu32i()
{
  {
    init_simple_test("BFu7c_C_BFu32i");
    static STRUCT_IF_C BFu7c_C_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu32i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_C_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_C_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu32i, BFu7c_C_BFu32i)
//============================================================================


struct  BFu7c_C_BFu32ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_C_BFu32ll) C1{ Fc:7 Fc FL:32}



static void Test_BFu7c_C_BFu32ll()
{
  {
    init_simple_test("BFu7c_C_BFu32ll");
    static STRUCT_IF_C BFu7c_C_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7c_C_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7c_C_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu32ll, BFu7c_C_BFu32ll)
//============================================================================


struct  BFu7c_C_BFu33  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_C_BFu33) C1{ Fc:7 Fc FL:33}



static void Test_BFu7c_C_BFu33()
{
  {
    init_simple_test("BFu7c_C_BFu33");
    static STRUCT_IF_C BFu7c_C_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu33");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7c_C_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7c_C_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu33, BFu7c_C_BFu33)
//============================================================================


struct  BFu7c_C_BFu7c  {
  unsigned char v1:7;
  char v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_C_BFu7c) C1{ Fc:7 Fc Fc:7}



static void Test_BFu7c_C_BFu7c()
{
  {
    init_simple_test("BFu7c_C_BFu7c");
    static STRUCT_IF_C BFu7c_C_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_C_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_C_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu7c");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_C_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu7c, BFu7c_C_BFu7c)
//============================================================================


struct  BFu7c_C_BFu7i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_C_BFu7i) C1{ Fc:7 Fc Fi:7}



static void Test_BFu7c_C_BFu7i()
{
  {
    init_simple_test("BFu7c_C_BFu7i");
    static STRUCT_IF_C BFu7c_C_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu7i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_C_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu7i, BFu7c_C_BFu7i)
//============================================================================


struct  BFu7c_C_BFu7ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_C_BFu7ll) C1{ Fc:7 Fc FL:7}



static void Test_BFu7c_C_BFu7ll()
{
  {
    init_simple_test("BFu7c_C_BFu7ll");
    static STRUCT_IF_C BFu7c_C_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_C_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_C_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu7ll, BFu7c_C_BFu7ll)
//============================================================================


struct  BFu7c_C_BFu7s  {
  unsigned char v1:7;
  char v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_C_BFu7s) C1{ Fc:7 Fc Fs:7}



static void Test_BFu7c_C_BFu7s()
{
  {
    init_simple_test("BFu7c_C_BFu7s");
    static STRUCT_IF_C BFu7c_C_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_C_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu7s");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_C_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu7s, BFu7c_C_BFu7s)
//============================================================================


struct  BFu7c_C_BFu8c  {
  unsigned char v1:7;
  char v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_C_BFu8c) C1{ Fc:7 Fc Fc:8}



static void Test_BFu7c_C_BFu8c()
{
  {
    init_simple_test("BFu7c_C_BFu8c");
    static STRUCT_IF_C BFu7c_C_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_C_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_C_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu8c");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_C_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_C_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu8c, BFu7c_C_BFu8c)
//============================================================================


struct  BFu7c_C_BFu8i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_C_BFu8i) C1{ Fc:7 Fc Fi:8}



static void Test_BFu7c_C_BFu8i()
{
  {
    init_simple_test("BFu7c_C_BFu8i");
    static STRUCT_IF_C BFu7c_C_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu8i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_C_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_C_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu8i, BFu7c_C_BFu8i)
//============================================================================


struct  BFu7c_C_BFu8ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_C_BFu8ll) C1{ Fc:7 Fc FL:8}



static void Test_BFu7c_C_BFu8ll()
{
  {
    init_simple_test("BFu7c_C_BFu8ll");
    static STRUCT_IF_C BFu7c_C_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_C_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_C_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_C_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu8ll, BFu7c_C_BFu8ll)
//============================================================================


struct  BFu7c_C_BFu8s  {
  unsigned char v1:7;
  char v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_C_BFu8s) C1{ Fc:7 Fc Fs:8}



static void Test_BFu7c_C_BFu8s()
{
  {
    init_simple_test("BFu7c_C_BFu8s");
    static STRUCT_IF_C BFu7c_C_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_C_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu8s");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_C_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_C_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu8s, BFu7c_C_BFu8s)
//============================================================================


struct  BFu7c_C_BFu9i  {
  unsigned char v1:7;
  char v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_C_BFu9i) C1{ Fc:7 Fc Fi:9}



static void Test_BFu7c_C_BFu9i()
{
  {
    init_simple_test("BFu7c_C_BFu9i");
    static STRUCT_IF_C BFu7c_C_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu9i");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_C_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_C_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu9i, BFu7c_C_BFu9i)
//============================================================================


struct  BFu7c_C_BFu9ll  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_C_BFu9ll) C1{ Fc:7 Fc FL:9}



static void Test_BFu7c_C_BFu9ll()
{
  {
    init_simple_test("BFu7c_C_BFu9ll");
    static STRUCT_IF_C BFu7c_C_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_C_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_C_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_C_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu9ll, BFu7c_C_BFu9ll)
//============================================================================


struct  BFu7c_C_BFu9s  {
  unsigned char v1:7;
  char v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_C_BFu9s) C1{ Fc:7 Fc Fs:9}



static void Test_BFu7c_C_BFu9s()
{
  {
    init_simple_test("BFu7c_C_BFu9s");
    static STRUCT_IF_C BFu7c_C_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_C_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_BFu9s");
    check_field_offset(lv, v2, 1, "BFu7c_C_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_C_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_C_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_BFu9s, BFu7c_C_BFu9s)
//============================================================================


struct  BFu7c_C_C  {
  unsigned char v1:7;
  char v2;
  char v3;
};
//SIG(1 BFu7c_C_C) C1{ Fc:7 Fc[2]}



static void Test_BFu7c_C_C()
{
  {
    init_simple_test("BFu7c_C_C");
    static STRUCT_IF_C BFu7c_C_C lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_C_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_C_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_C");
    check_field_offset(lv, v2, 1, "BFu7c_C_C.v2");
    check_field_offset(lv, v3, 2, "BFu7c_C_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_C, BFu7c_C_C)
//============================================================================


struct  BFu7c_C_D  {
  unsigned char v1:7;
  char v2;
  double v3;
};
//SIG(1 BFu7c_C_D) C1{ Fc:7 Fc FL}



static void Test_BFu7c_C_D()
{
  {
    init_simple_test("BFu7c_C_D");
    static STRUCT_IF_C BFu7c_C_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_C_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_D");
    check_field_offset(lv, v2, 1, "BFu7c_C_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_C_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_D, BFu7c_C_D)
//============================================================================


struct  BFu7c_C_F  {
  unsigned char v1:7;
  char v2;
  float v3;
};
//SIG(1 BFu7c_C_F) C1{ Fc:7 Fc Fi}



static void Test_BFu7c_C_F()
{
  {
    init_simple_test("BFu7c_C_F");
    static STRUCT_IF_C BFu7c_C_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_F");
    check_field_offset(lv, v2, 1, "BFu7c_C_F.v2");
    check_field_offset(lv, v3, 4, "BFu7c_C_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_F, BFu7c_C_F)
//============================================================================


struct  BFu7c_C_I  {
  unsigned char v1:7;
  char v2;
  int v3;
};
//SIG(1 BFu7c_C_I) C1{ Fc:7 Fc Fi}



static void Test_BFu7c_C_I()
{
  {
    init_simple_test("BFu7c_C_I");
    static STRUCT_IF_C BFu7c_C_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_I");
    check_field_offset(lv, v2, 1, "BFu7c_C_I.v2");
    check_field_offset(lv, v3, 4, "BFu7c_C_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_I, BFu7c_C_I)
//============================================================================


struct  BFu7c_C_Ip  {
  unsigned char v1:7;
  char v2;
  int *v3;
};
//SIG(1 BFu7c_C_Ip) C1{ Fc:7 Fc Fp}



static void Test_BFu7c_C_Ip()
{
  {
    init_simple_test("BFu7c_C_Ip");
    static STRUCT_IF_C BFu7c_C_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_C_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_Ip");
    check_field_offset(lv, v2, 1, "BFu7c_C_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_C_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_Ip, BFu7c_C_Ip)
//============================================================================


struct  BFu7c_C_L  {
  unsigned char v1:7;
  char v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_C_L) C1{ Fc:7 Fc FL}



static void Test_BFu7c_C_L()
{
  {
    init_simple_test("BFu7c_C_L");
    static STRUCT_IF_C BFu7c_C_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_C_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_L");
    check_field_offset(lv, v2, 1, "BFu7c_C_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_C_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_L, BFu7c_C_L)
//============================================================================


struct  BFu7c_C_S  {
  unsigned char v1:7;
  char v2;
  short v3;
};
//SIG(1 BFu7c_C_S) C1{ Fc:7 Fc Fs}



static void Test_BFu7c_C_S()
{
  {
    init_simple_test("BFu7c_C_S");
    static STRUCT_IF_C BFu7c_C_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_C_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_S");
    check_field_offset(lv, v2, 1, "BFu7c_C_S.v2");
    check_field_offset(lv, v3, 2, "BFu7c_C_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_S, BFu7c_C_S)
//============================================================================


struct  BFu7c_C_Uc  {
  unsigned char v1:7;
  char v2;
  unsigned char v3;
};
//SIG(1 BFu7c_C_Uc) C1{ Fc:7 Fc[2]}



static void Test_BFu7c_C_Uc()
{
  {
    init_simple_test("BFu7c_C_Uc");
    static STRUCT_IF_C BFu7c_C_Uc lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_C_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_C_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_Uc");
    check_field_offset(lv, v2, 1, "BFu7c_C_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu7c_C_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_Uc, BFu7c_C_Uc)
//============================================================================


struct  BFu7c_C_Ui  {
  unsigned char v1:7;
  char v2;
  unsigned int v3;
};
//SIG(1 BFu7c_C_Ui) C1{ Fc:7 Fc Fi}



static void Test_BFu7c_C_Ui()
{
  {
    init_simple_test("BFu7c_C_Ui");
    static STRUCT_IF_C BFu7c_C_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_C_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_C_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_Ui");
    check_field_offset(lv, v2, 1, "BFu7c_C_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7c_C_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_Ui, BFu7c_C_Ui)
//============================================================================


struct  BFu7c_C_Ul  {
  unsigned char v1:7;
  char v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_C_Ul) C1{ Fc:7 Fc FL}



static void Test_BFu7c_C_Ul()
{
  {
    init_simple_test("BFu7c_C_Ul");
    static STRUCT_IF_C BFu7c_C_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_C_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_Ul");
    check_field_offset(lv, v2, 1, "BFu7c_C_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_C_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_Ul, BFu7c_C_Ul)
//============================================================================


struct  BFu7c_C_Us  {
  unsigned char v1:7;
  char v2;
  unsigned short v3;
};
//SIG(1 BFu7c_C_Us) C1{ Fc:7 Fc Fs}



static void Test_BFu7c_C_Us()
{
  {
    init_simple_test("BFu7c_C_Us");
    static STRUCT_IF_C BFu7c_C_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_C_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_C_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_Us");
    check_field_offset(lv, v2, 1, "BFu7c_C_Us.v2");
    check_field_offset(lv, v3, 2, "BFu7c_C_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_Us, BFu7c_C_Us)
//============================================================================


struct  BFu7c_C_Vp  {
  unsigned char v1:7;
  char v2;
  void *v3;
};
//SIG(1 BFu7c_C_Vp) C1{ Fc:7 Fc Fp}



static void Test_BFu7c_C_Vp()
{
  {
    init_simple_test("BFu7c_C_Vp");
    static STRUCT_IF_C BFu7c_C_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_C_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_C_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_C_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_C_Vp");
    check_field_offset(lv, v2, 1, "BFu7c_C_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_C_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_C_Vp, BFu7c_C_Vp)
//============================================================================


struct  BFu7c_D  {
  unsigned char v1:7;
  double v2;
};
//SIG(1 BFu7c_D) C1{ Fc:7 FL}



static void Test_BFu7c_D()
{
  {
    init_simple_test("BFu7c_D");
    static STRUCT_IF_C BFu7c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D, BFu7c_D)
//============================================================================


struct  BFu7c_D_BFu15i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_D_BFu15i) C1{ Fc:7 FL Fi:15}



static void Test_BFu7c_D_BFu15i()
{
  {
    init_simple_test("BFu7c_D_BFu15i");
    static STRUCT_IF_C BFu7c_D_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_D_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_D_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu15i, BFu7c_D_BFu15i)
//============================================================================


struct  BFu7c_D_BFu15ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_D_BFu15ll) C1{ Fc:7 FL FL:15}



static void Test_BFu7c_D_BFu15ll()
{
  {
    init_simple_test("BFu7c_D_BFu15ll");
    static STRUCT_IF_C BFu7c_D_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_D_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_D_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu15ll, BFu7c_D_BFu15ll)
//============================================================================


struct  BFu7c_D_BFu15s  {
  unsigned char v1:7;
  double v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_D_BFu15s) C1{ Fc:7 FL Fs:15}



static void Test_BFu7c_D_BFu15s()
{
  {
    init_simple_test("BFu7c_D_BFu15s");
    static STRUCT_IF_C BFu7c_D_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_D_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_D_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu15s, BFu7c_D_BFu15s)
//============================================================================


struct  BFu7c_D_BFu16i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_D_BFu16i) C1{ Fc:7 FL Fi:16}



static void Test_BFu7c_D_BFu16i()
{
  {
    init_simple_test("BFu7c_D_BFu16i");
    static STRUCT_IF_C BFu7c_D_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_D_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_D_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu16i, BFu7c_D_BFu16i)
//============================================================================


struct  BFu7c_D_BFu16ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_D_BFu16ll) C1{ Fc:7 FL FL:16}



static void Test_BFu7c_D_BFu16ll()
{
  {
    init_simple_test("BFu7c_D_BFu16ll");
    static STRUCT_IF_C BFu7c_D_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_D_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_D_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu16ll, BFu7c_D_BFu16ll)
//============================================================================


struct  BFu7c_D_BFu16s  {
  unsigned char v1:7;
  double v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_D_BFu16s) C1{ Fc:7 FL Fs:16}



static void Test_BFu7c_D_BFu16s()
{
  {
    init_simple_test("BFu7c_D_BFu16s");
    static STRUCT_IF_C BFu7c_D_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_D_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_D_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu16s, BFu7c_D_BFu16s)
//============================================================================


struct  BFu7c_D_BFu17i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_D_BFu17i) C1{ Fc:7 FL Fi:17}



static void Test_BFu7c_D_BFu17i()
{
  {
    init_simple_test("BFu7c_D_BFu17i");
    static STRUCT_IF_C BFu7c_D_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7c_D_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7c_D_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu17i, BFu7c_D_BFu17i)
//============================================================================


struct  BFu7c_D_BFu17ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_D_BFu17ll) C1{ Fc:7 FL FL:17}



static void Test_BFu7c_D_BFu17ll()
{
  {
    init_simple_test("BFu7c_D_BFu17ll");
    static STRUCT_IF_C BFu7c_D_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7c_D_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7c_D_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu17ll, BFu7c_D_BFu17ll)
//============================================================================


struct  BFu7c_D_BFu1c  {
  unsigned char v1:7;
  double v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_D_BFu1c) C1{ Fc:7 FL Fc:1}



static void Test_BFu7c_D_BFu1c()
{
  {
    init_simple_test("BFu7c_D_BFu1c");
    static STRUCT_IF_C BFu7c_D_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_D_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu1c, BFu7c_D_BFu1c)
//============================================================================


struct  BFu7c_D_BFu1i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_D_BFu1i) C1{ Fc:7 FL Fi:1}



static void Test_BFu7c_D_BFu1i()
{
  {
    init_simple_test("BFu7c_D_BFu1i");
    static STRUCT_IF_C BFu7c_D_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_D_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu1i, BFu7c_D_BFu1i)
//============================================================================


struct  BFu7c_D_BFu1ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_D_BFu1ll) C1{ Fc:7 FL FL:1}



static void Test_BFu7c_D_BFu1ll()
{
  {
    init_simple_test("BFu7c_D_BFu1ll");
    static STRUCT_IF_C BFu7c_D_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_D_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu1ll, BFu7c_D_BFu1ll)
//============================================================================


struct  BFu7c_D_BFu1s  {
  unsigned char v1:7;
  double v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_D_BFu1s) C1{ Fc:7 FL Fs:1}



static void Test_BFu7c_D_BFu1s()
{
  {
    init_simple_test("BFu7c_D_BFu1s");
    static STRUCT_IF_C BFu7c_D_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_D_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu1s, BFu7c_D_BFu1s)
//============================================================================


struct  BFu7c_D_BFu31i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_D_BFu31i) C1{ Fc:7 FL Fi:31}



static void Test_BFu7c_D_BFu31i()
{
  {
    init_simple_test("BFu7c_D_BFu31i");
    static STRUCT_IF_C BFu7c_D_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7c_D_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7c_D_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu31i, BFu7c_D_BFu31i)
//============================================================================


struct  BFu7c_D_BFu31ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_D_BFu31ll) C1{ Fc:7 FL FL:31}



static void Test_BFu7c_D_BFu31ll()
{
  {
    init_simple_test("BFu7c_D_BFu31ll");
    static STRUCT_IF_C BFu7c_D_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7c_D_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7c_D_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu31ll, BFu7c_D_BFu31ll)
//============================================================================


struct  BFu7c_D_BFu32i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_D_BFu32i) C1{ Fc:7 FL Fi:32}



static void Test_BFu7c_D_BFu32i()
{
  {
    init_simple_test("BFu7c_D_BFu32i");
    static STRUCT_IF_C BFu7c_D_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7c_D_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7c_D_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu32i, BFu7c_D_BFu32i)
//============================================================================


struct  BFu7c_D_BFu32ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_D_BFu32ll) C1{ Fc:7 FL FL:32}



static void Test_BFu7c_D_BFu32ll()
{
  {
    init_simple_test("BFu7c_D_BFu32ll");
    static STRUCT_IF_C BFu7c_D_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7c_D_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7c_D_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu32ll, BFu7c_D_BFu32ll)
//============================================================================


struct  BFu7c_D_BFu33  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_D_BFu33) C1{ Fc:7 FL FL:33}



static void Test_BFu7c_D_BFu33()
{
  {
    init_simple_test("BFu7c_D_BFu33");
    static STRUCT_IF_C BFu7c_D_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_D_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7c_D_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7c_D_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu33, BFu7c_D_BFu33)
//============================================================================


struct  BFu7c_D_BFu7c  {
  unsigned char v1:7;
  double v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_D_BFu7c) C1{ Fc:7 FL Fc:7}



static void Test_BFu7c_D_BFu7c()
{
  {
    init_simple_test("BFu7c_D_BFu7c");
    static STRUCT_IF_C BFu7c_D_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_D_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu7c, BFu7c_D_BFu7c)
//============================================================================


struct  BFu7c_D_BFu7i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_D_BFu7i) C1{ Fc:7 FL Fi:7}



static void Test_BFu7c_D_BFu7i()
{
  {
    init_simple_test("BFu7c_D_BFu7i");
    static STRUCT_IF_C BFu7c_D_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_D_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu7i, BFu7c_D_BFu7i)
//============================================================================


struct  BFu7c_D_BFu7ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_D_BFu7ll) C1{ Fc:7 FL FL:7}



static void Test_BFu7c_D_BFu7ll()
{
  {
    init_simple_test("BFu7c_D_BFu7ll");
    static STRUCT_IF_C BFu7c_D_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_D_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu7ll, BFu7c_D_BFu7ll)
//============================================================================


struct  BFu7c_D_BFu7s  {
  unsigned char v1:7;
  double v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_D_BFu7s) C1{ Fc:7 FL Fs:7}



static void Test_BFu7c_D_BFu7s()
{
  {
    init_simple_test("BFu7c_D_BFu7s");
    static STRUCT_IF_C BFu7c_D_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_D_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu7s, BFu7c_D_BFu7s)
//============================================================================


struct  BFu7c_D_BFu8c  {
  unsigned char v1:7;
  double v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_D_BFu8c) C1{ Fc:7 FL Fc:8}



static void Test_BFu7c_D_BFu8c()
{
  {
    init_simple_test("BFu7c_D_BFu8c");
    static STRUCT_IF_C BFu7c_D_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_D_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_D_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu8c, BFu7c_D_BFu8c)
//============================================================================


struct  BFu7c_D_BFu8i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_D_BFu8i) C1{ Fc:7 FL Fi:8}



static void Test_BFu7c_D_BFu8i()
{
  {
    init_simple_test("BFu7c_D_BFu8i");
    static STRUCT_IF_C BFu7c_D_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_D_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_D_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu8i, BFu7c_D_BFu8i)
//============================================================================


struct  BFu7c_D_BFu8ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_D_BFu8ll) C1{ Fc:7 FL FL:8}



static void Test_BFu7c_D_BFu8ll()
{
  {
    init_simple_test("BFu7c_D_BFu8ll");
    static STRUCT_IF_C BFu7c_D_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_D_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_D_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu8ll, BFu7c_D_BFu8ll)
//============================================================================


struct  BFu7c_D_BFu8s  {
  unsigned char v1:7;
  double v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_D_BFu8s) C1{ Fc:7 FL Fs:8}



static void Test_BFu7c_D_BFu8s()
{
  {
    init_simple_test("BFu7c_D_BFu8s");
    static STRUCT_IF_C BFu7c_D_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_D_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_D_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu8s, BFu7c_D_BFu8s)
//============================================================================


struct  BFu7c_D_BFu9i  {
  unsigned char v1:7;
  double v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_D_BFu9i) C1{ Fc:7 FL Fi:9}



static void Test_BFu7c_D_BFu9i()
{
  {
    init_simple_test("BFu7c_D_BFu9i");
    static STRUCT_IF_C BFu7c_D_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_D_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_D_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu9i, BFu7c_D_BFu9i)
//============================================================================


struct  BFu7c_D_BFu9ll  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_D_BFu9ll) C1{ Fc:7 FL FL:9}



static void Test_BFu7c_D_BFu9ll()
{
  {
    init_simple_test("BFu7c_D_BFu9ll");
    static STRUCT_IF_C BFu7c_D_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_D_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_D_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu9ll, BFu7c_D_BFu9ll)
//============================================================================


struct  BFu7c_D_BFu9s  {
  unsigned char v1:7;
  double v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_D_BFu9s) C1{ Fc:7 FL Fs:9}



static void Test_BFu7c_D_BFu9s()
{
  {
    init_simple_test("BFu7c_D_BFu9s");
    static STRUCT_IF_C BFu7c_D_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_D_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_D_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_BFu9s, BFu7c_D_BFu9s)
//============================================================================


struct  BFu7c_D_C  {
  unsigned char v1:7;
  double v2;
  char v3;
};
//SIG(1 BFu7c_D_C) C1{ Fc:7 FL Fc}



static void Test_BFu7c_D_C()
{
  {
    init_simple_test("BFu7c_D_C");
    static STRUCT_IF_C BFu7c_D_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_C, BFu7c_D_C)
//============================================================================


struct  BFu7c_D_D  {
  unsigned char v1:7;
  double v2;
  double v3;
};
//SIG(1 BFu7c_D_D) C1{ Fc:7 FL[2]}



static void Test_BFu7c_D_D()
{
  {
    init_simple_test("BFu7c_D_D");
    static STRUCT_IF_C BFu7c_D_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_D_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_D, BFu7c_D_D)
//============================================================================


struct  BFu7c_D_F  {
  unsigned char v1:7;
  double v2;
  float v3;
};
//SIG(1 BFu7c_D_F) C1{ Fc:7 FL Fi}



static void Test_BFu7c_D_F()
{
  {
    init_simple_test("BFu7c_D_F");
    static STRUCT_IF_C BFu7c_D_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_F, BFu7c_D_F)
//============================================================================


struct  BFu7c_D_I  {
  unsigned char v1:7;
  double v2;
  int v3;
};
//SIG(1 BFu7c_D_I) C1{ Fc:7 FL Fi}



static void Test_BFu7c_D_I()
{
  {
    init_simple_test("BFu7c_D_I");
    static STRUCT_IF_C BFu7c_D_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_I, BFu7c_D_I)
//============================================================================


struct  BFu7c_D_Ip  {
  unsigned char v1:7;
  double v2;
  int *v3;
};
//SIG(1 BFu7c_D_Ip) C1{ Fc:7 FL Fp}



static void Test_BFu7c_D_Ip()
{
  {
    init_simple_test("BFu7c_D_Ip");
    static STRUCT_IF_C BFu7c_D_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_Ip, BFu7c_D_Ip)
//============================================================================


struct  BFu7c_D_L  {
  unsigned char v1:7;
  double v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_D_L) C1{ Fc:7 FL[2]}



static void Test_BFu7c_D_L()
{
  {
    init_simple_test("BFu7c_D_L");
    static STRUCT_IF_C BFu7c_D_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_D_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_L, BFu7c_D_L)
//============================================================================


struct  BFu7c_D_S  {
  unsigned char v1:7;
  double v2;
  short v3;
};
//SIG(1 BFu7c_D_S) C1{ Fc:7 FL Fs}



static void Test_BFu7c_D_S()
{
  {
    init_simple_test("BFu7c_D_S");
    static STRUCT_IF_C BFu7c_D_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_S, BFu7c_D_S)
//============================================================================


struct  BFu7c_D_Uc  {
  unsigned char v1:7;
  double v2;
  unsigned char v3;
};
//SIG(1 BFu7c_D_Uc) C1{ Fc:7 FL Fc}



static void Test_BFu7c_D_Uc()
{
  {
    init_simple_test("BFu7c_D_Uc");
    static STRUCT_IF_C BFu7c_D_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_Uc, BFu7c_D_Uc)
//============================================================================


struct  BFu7c_D_Ui  {
  unsigned char v1:7;
  double v2;
  unsigned int v3;
};
//SIG(1 BFu7c_D_Ui) C1{ Fc:7 FL Fi}



static void Test_BFu7c_D_Ui()
{
  {
    init_simple_test("BFu7c_D_Ui");
    static STRUCT_IF_C BFu7c_D_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_Ui, BFu7c_D_Ui)
//============================================================================


struct  BFu7c_D_Ul  {
  unsigned char v1:7;
  double v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_D_Ul) C1{ Fc:7 FL[2]}



static void Test_BFu7c_D_Ul()
{
  {
    init_simple_test("BFu7c_D_Ul");
    static STRUCT_IF_C BFu7c_D_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_D_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_Ul, BFu7c_D_Ul)
//============================================================================


struct  BFu7c_D_Us  {
  unsigned char v1:7;
  double v2;
  unsigned short v3;
};
//SIG(1 BFu7c_D_Us) C1{ Fc:7 FL Fs}



static void Test_BFu7c_D_Us()
{
  {
    init_simple_test("BFu7c_D_Us");
    static STRUCT_IF_C BFu7c_D_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_Us, BFu7c_D_Us)
//============================================================================


struct  BFu7c_D_Vp  {
  unsigned char v1:7;
  double v2;
  void *v3;
};
//SIG(1 BFu7c_D_Vp) C1{ Fc:7 FL Fp}



static void Test_BFu7c_D_Vp()
{
  {
    init_simple_test("BFu7c_D_Vp");
    static STRUCT_IF_C BFu7c_D_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_D_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_D_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_D_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_D_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_D_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_D_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_D_Vp, BFu7c_D_Vp)
//============================================================================


struct  BFu7c_F  {
  unsigned char v1:7;
  float v2;
};
//SIG(1 BFu7c_F) C1{ Fc:7 Fi}



static void Test_BFu7c_F()
{
  {
    init_simple_test("BFu7c_F");
    static STRUCT_IF_C BFu7c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F");
    check_field_offset(lv, v2, 4, "BFu7c_F.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F, BFu7c_F)
//============================================================================


struct  BFu7c_F_BFu15i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_F_BFu15i) C1{ Fc:7 Fi Fi:15}



static void Test_BFu7c_F_BFu15i()
{
  {
    init_simple_test("BFu7c_F_BFu15i");
    static STRUCT_IF_C BFu7c_F_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_F_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_F_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu15i, BFu7c_F_BFu15i)
//============================================================================


struct  BFu7c_F_BFu15ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_F_BFu15ll) C1{ Fc:7 Fi FL:15}



static void Test_BFu7c_F_BFu15ll()
{
  {
    init_simple_test("BFu7c_F_BFu15ll");
    static STRUCT_IF_C BFu7c_F_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_F_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_F_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu15ll, BFu7c_F_BFu15ll)
//============================================================================


struct  BFu7c_F_BFu15s  {
  unsigned char v1:7;
  float v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_F_BFu15s) C1{ Fc:7 Fi Fs:15}



static void Test_BFu7c_F_BFu15s()
{
  {
    init_simple_test("BFu7c_F_BFu15s");
    static STRUCT_IF_C BFu7c_F_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_F_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_F_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu15s, BFu7c_F_BFu15s)
//============================================================================


struct  BFu7c_F_BFu16i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_F_BFu16i) C1{ Fc:7 Fi Fi:16}



static void Test_BFu7c_F_BFu16i()
{
  {
    init_simple_test("BFu7c_F_BFu16i");
    static STRUCT_IF_C BFu7c_F_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_F_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_F_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu16i, BFu7c_F_BFu16i)
//============================================================================


struct  BFu7c_F_BFu16ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_F_BFu16ll) C1{ Fc:7 Fi FL:16}



static void Test_BFu7c_F_BFu16ll()
{
  {
    init_simple_test("BFu7c_F_BFu16ll");
    static STRUCT_IF_C BFu7c_F_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_F_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_F_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu16ll, BFu7c_F_BFu16ll)
//============================================================================


struct  BFu7c_F_BFu16s  {
  unsigned char v1:7;
  float v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_F_BFu16s) C1{ Fc:7 Fi Fs:16}



static void Test_BFu7c_F_BFu16s()
{
  {
    init_simple_test("BFu7c_F_BFu16s");
    static STRUCT_IF_C BFu7c_F_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_F_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_F_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu16s, BFu7c_F_BFu16s)
//============================================================================


struct  BFu7c_F_BFu17i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_F_BFu17i) C1{ Fc:7 Fi Fi:17}



static void Test_BFu7c_F_BFu17i()
{
  {
    init_simple_test("BFu7c_F_BFu17i");
    static STRUCT_IF_C BFu7c_F_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_F_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_F_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu17i, BFu7c_F_BFu17i)
//============================================================================


struct  BFu7c_F_BFu17ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_F_BFu17ll) C1{ Fc:7 Fi FL:17}



static void Test_BFu7c_F_BFu17ll()
{
  {
    init_simple_test("BFu7c_F_BFu17ll");
    static STRUCT_IF_C BFu7c_F_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_F_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_F_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu17ll, BFu7c_F_BFu17ll)
//============================================================================


struct  BFu7c_F_BFu1c  {
  unsigned char v1:7;
  float v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_F_BFu1c) C1{ Fc:7 Fi Fc:1}



static void Test_BFu7c_F_BFu1c()
{
  {
    init_simple_test("BFu7c_F_BFu1c");
    static STRUCT_IF_C BFu7c_F_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_F_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu1c, BFu7c_F_BFu1c)
//============================================================================


struct  BFu7c_F_BFu1i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_F_BFu1i) C1{ Fc:7 Fi Fi:1}



static void Test_BFu7c_F_BFu1i()
{
  {
    init_simple_test("BFu7c_F_BFu1i");
    static STRUCT_IF_C BFu7c_F_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_F_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu1i, BFu7c_F_BFu1i)
//============================================================================


struct  BFu7c_F_BFu1ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_F_BFu1ll) C1{ Fc:7 Fi FL:1}



static void Test_BFu7c_F_BFu1ll()
{
  {
    init_simple_test("BFu7c_F_BFu1ll");
    static STRUCT_IF_C BFu7c_F_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_F_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu1ll, BFu7c_F_BFu1ll)
//============================================================================


struct  BFu7c_F_BFu1s  {
  unsigned char v1:7;
  float v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_F_BFu1s) C1{ Fc:7 Fi Fs:1}



static void Test_BFu7c_F_BFu1s()
{
  {
    init_simple_test("BFu7c_F_BFu1s");
    static STRUCT_IF_C BFu7c_F_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_F_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu1s, BFu7c_F_BFu1s)
//============================================================================


struct  BFu7c_F_BFu31i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_F_BFu31i) C1{ Fc:7 Fi Fi:31}



static void Test_BFu7c_F_BFu31i()
{
  {
    init_simple_test("BFu7c_F_BFu31i");
    static STRUCT_IF_C BFu7c_F_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_F_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_F_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu31i, BFu7c_F_BFu31i)
//============================================================================


struct  BFu7c_F_BFu31ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_F_BFu31ll) C1{ Fc:7 Fi FL:31}



static void Test_BFu7c_F_BFu31ll()
{
  {
    init_simple_test("BFu7c_F_BFu31ll");
    static STRUCT_IF_C BFu7c_F_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_F_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_F_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu31ll, BFu7c_F_BFu31ll)
//============================================================================


struct  BFu7c_F_BFu32i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_F_BFu32i) C1{ Fc:7 Fi Fi:32}



static void Test_BFu7c_F_BFu32i()
{
  {
    init_simple_test("BFu7c_F_BFu32i");
    static STRUCT_IF_C BFu7c_F_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_F_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_F_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu32i, BFu7c_F_BFu32i)
//============================================================================


struct  BFu7c_F_BFu32ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_F_BFu32ll) C1{ Fc:7 Fi FL:32}



static void Test_BFu7c_F_BFu32ll()
{
  {
    init_simple_test("BFu7c_F_BFu32ll");
    static STRUCT_IF_C BFu7c_F_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_F_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_F_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu32ll, BFu7c_F_BFu32ll)
//============================================================================


struct  BFu7c_F_BFu33  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_F_BFu33) C1{ Fc:7 Fi FL:33}



static void Test_BFu7c_F_BFu33()
{
  {
    init_simple_test("BFu7c_F_BFu33");
    static STRUCT_IF_C BFu7c_F_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_F_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu33");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7c_F_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7c_F_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu33, BFu7c_F_BFu33)
//============================================================================


struct  BFu7c_F_BFu7c  {
  unsigned char v1:7;
  float v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_F_BFu7c) C1{ Fc:7 Fi Fc:7}



static void Test_BFu7c_F_BFu7c()
{
  {
    init_simple_test("BFu7c_F_BFu7c");
    static STRUCT_IF_C BFu7c_F_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_F_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu7c, BFu7c_F_BFu7c)
//============================================================================


struct  BFu7c_F_BFu7i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_F_BFu7i) C1{ Fc:7 Fi Fi:7}



static void Test_BFu7c_F_BFu7i()
{
  {
    init_simple_test("BFu7c_F_BFu7i");
    static STRUCT_IF_C BFu7c_F_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_F_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu7i, BFu7c_F_BFu7i)
//============================================================================


struct  BFu7c_F_BFu7ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_F_BFu7ll) C1{ Fc:7 Fi FL:7}



static void Test_BFu7c_F_BFu7ll()
{
  {
    init_simple_test("BFu7c_F_BFu7ll");
    static STRUCT_IF_C BFu7c_F_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_F_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu7ll, BFu7c_F_BFu7ll)
//============================================================================


struct  BFu7c_F_BFu7s  {
  unsigned char v1:7;
  float v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_F_BFu7s) C1{ Fc:7 Fi Fs:7}



static void Test_BFu7c_F_BFu7s()
{
  {
    init_simple_test("BFu7c_F_BFu7s");
    static STRUCT_IF_C BFu7c_F_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_F_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu7s, BFu7c_F_BFu7s)
//============================================================================


struct  BFu7c_F_BFu8c  {
  unsigned char v1:7;
  float v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_F_BFu8c) C1{ Fc:7 Fi Fc:8}



static void Test_BFu7c_F_BFu8c()
{
  {
    init_simple_test("BFu7c_F_BFu8c");
    static STRUCT_IF_C BFu7c_F_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_F_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_F_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu8c, BFu7c_F_BFu8c)
//============================================================================


struct  BFu7c_F_BFu8i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_F_BFu8i) C1{ Fc:7 Fi Fi:8}



static void Test_BFu7c_F_BFu8i()
{
  {
    init_simple_test("BFu7c_F_BFu8i");
    static STRUCT_IF_C BFu7c_F_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_F_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_F_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu8i, BFu7c_F_BFu8i)
//============================================================================


struct  BFu7c_F_BFu8ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_F_BFu8ll) C1{ Fc:7 Fi FL:8}



static void Test_BFu7c_F_BFu8ll()
{
  {
    init_simple_test("BFu7c_F_BFu8ll");
    static STRUCT_IF_C BFu7c_F_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_F_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_F_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu8ll, BFu7c_F_BFu8ll)
//============================================================================


struct  BFu7c_F_BFu8s  {
  unsigned char v1:7;
  float v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_F_BFu8s) C1{ Fc:7 Fi Fs:8}



static void Test_BFu7c_F_BFu8s()
{
  {
    init_simple_test("BFu7c_F_BFu8s");
    static STRUCT_IF_C BFu7c_F_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_F_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_F_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu8s, BFu7c_F_BFu8s)
//============================================================================


struct  BFu7c_F_BFu9i  {
  unsigned char v1:7;
  float v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_F_BFu9i) C1{ Fc:7 Fi Fi:9}



static void Test_BFu7c_F_BFu9i()
{
  {
    init_simple_test("BFu7c_F_BFu9i");
    static STRUCT_IF_C BFu7c_F_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_F_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_F_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu9i, BFu7c_F_BFu9i)
//============================================================================


struct  BFu7c_F_BFu9ll  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_F_BFu9ll) C1{ Fc:7 Fi FL:9}



static void Test_BFu7c_F_BFu9ll()
{
  {
    init_simple_test("BFu7c_F_BFu9ll");
    static STRUCT_IF_C BFu7c_F_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_F_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_F_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu9ll, BFu7c_F_BFu9ll)
//============================================================================


struct  BFu7c_F_BFu9s  {
  unsigned char v1:7;
  float v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_F_BFu9s) C1{ Fc:7 Fi Fs:9}



static void Test_BFu7c_F_BFu9s()
{
  {
    init_simple_test("BFu7c_F_BFu9s");
    static STRUCT_IF_C BFu7c_F_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7c_F_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_F_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_F_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_BFu9s, BFu7c_F_BFu9s)
//============================================================================


struct  BFu7c_F_C  {
  unsigned char v1:7;
  float v2;
  char v3;
};
//SIG(1 BFu7c_F_C) C1{ Fc:7 Fi Fc}



static void Test_BFu7c_F_C()
{
  {
    init_simple_test("BFu7c_F_C");
    static STRUCT_IF_C BFu7c_F_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_C");
    check_field_offset(lv, v2, 4, "BFu7c_F_C.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_C, BFu7c_F_C)
//============================================================================


struct  BFu7c_F_D  {
  unsigned char v1:7;
  float v2;
  double v3;
};
//SIG(1 BFu7c_F_D) C1{ Fc:7 Fi FL}



static void Test_BFu7c_F_D()
{
  {
    init_simple_test("BFu7c_F_D");
    static STRUCT_IF_C BFu7c_F_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_F_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_D");
    check_field_offset(lv, v2, 4, "BFu7c_F_D.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_D, BFu7c_F_D)
//============================================================================


struct  BFu7c_F_F  {
  unsigned char v1:7;
  float v2;
  float v3;
};
//SIG(1 BFu7c_F_F) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_F_F()
{
  {
    init_simple_test("BFu7c_F_F");
    static STRUCT_IF_C BFu7c_F_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_F");
    check_field_offset(lv, v2, 4, "BFu7c_F_F.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_F, BFu7c_F_F)
//============================================================================


struct  BFu7c_F_I  {
  unsigned char v1:7;
  float v2;
  int v3;
};
//SIG(1 BFu7c_F_I) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_F_I()
{
  {
    init_simple_test("BFu7c_F_I");
    static STRUCT_IF_C BFu7c_F_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_I");
    check_field_offset(lv, v2, 4, "BFu7c_F_I.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_I, BFu7c_F_I)
//============================================================================


struct  BFu7c_F_Ip  {
  unsigned char v1:7;
  float v2;
  int *v3;
};
//SIG(1 BFu7c_F_Ip) C1{ Fc:7 Fi Fp}



static void Test_BFu7c_F_Ip()
{
  {
    init_simple_test("BFu7c_F_Ip");
    static STRUCT_IF_C BFu7c_F_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_Ip");
    check_field_offset(lv, v2, 4, "BFu7c_F_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_Ip, BFu7c_F_Ip)
//============================================================================


struct  BFu7c_F_L  {
  unsigned char v1:7;
  float v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_F_L) C1{ Fc:7 Fi FL}



static void Test_BFu7c_F_L()
{
  {
    init_simple_test("BFu7c_F_L");
    static STRUCT_IF_C BFu7c_F_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_F_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_L");
    check_field_offset(lv, v2, 4, "BFu7c_F_L.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_L, BFu7c_F_L)
//============================================================================


struct  BFu7c_F_S  {
  unsigned char v1:7;
  float v2;
  short v3;
};
//SIG(1 BFu7c_F_S) C1{ Fc:7 Fi Fs}



static void Test_BFu7c_F_S()
{
  {
    init_simple_test("BFu7c_F_S");
    static STRUCT_IF_C BFu7c_F_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_S");
    check_field_offset(lv, v2, 4, "BFu7c_F_S.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_S, BFu7c_F_S)
//============================================================================


struct  BFu7c_F_Uc  {
  unsigned char v1:7;
  float v2;
  unsigned char v3;
};
//SIG(1 BFu7c_F_Uc) C1{ Fc:7 Fi Fc}



static void Test_BFu7c_F_Uc()
{
  {
    init_simple_test("BFu7c_F_Uc");
    static STRUCT_IF_C BFu7c_F_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_Uc");
    check_field_offset(lv, v2, 4, "BFu7c_F_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_Uc, BFu7c_F_Uc)
//============================================================================


struct  BFu7c_F_Ui  {
  unsigned char v1:7;
  float v2;
  unsigned int v3;
};
//SIG(1 BFu7c_F_Ui) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_F_Ui()
{
  {
    init_simple_test("BFu7c_F_Ui");
    static STRUCT_IF_C BFu7c_F_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_Ui");
    check_field_offset(lv, v2, 4, "BFu7c_F_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_Ui, BFu7c_F_Ui)
//============================================================================


struct  BFu7c_F_Ul  {
  unsigned char v1:7;
  float v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_F_Ul) C1{ Fc:7 Fi FL}



static void Test_BFu7c_F_Ul()
{
  {
    init_simple_test("BFu7c_F_Ul");
    static STRUCT_IF_C BFu7c_F_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_F_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_Ul");
    check_field_offset(lv, v2, 4, "BFu7c_F_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_Ul, BFu7c_F_Ul)
//============================================================================


struct  BFu7c_F_Us  {
  unsigned char v1:7;
  float v2;
  unsigned short v3;
};
//SIG(1 BFu7c_F_Us) C1{ Fc:7 Fi Fs}



static void Test_BFu7c_F_Us()
{
  {
    init_simple_test("BFu7c_F_Us");
    static STRUCT_IF_C BFu7c_F_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_F_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_F_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_Us");
    check_field_offset(lv, v2, 4, "BFu7c_F_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_Us, BFu7c_F_Us)
//============================================================================


struct  BFu7c_F_Vp  {
  unsigned char v1:7;
  float v2;
  void *v3;
};
//SIG(1 BFu7c_F_Vp) C1{ Fc:7 Fi Fp}



static void Test_BFu7c_F_Vp()
{
  {
    init_simple_test("BFu7c_F_Vp");
    static STRUCT_IF_C BFu7c_F_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_F_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_F_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_F_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_F_Vp");
    check_field_offset(lv, v2, 4, "BFu7c_F_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7c_F_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_F_Vp, BFu7c_F_Vp)
//============================================================================


struct  BFu7c_I  {
  unsigned char v1:7;
  int v2;
};
//SIG(1 BFu7c_I) C1{ Fc:7 Fi}



static void Test_BFu7c_I()
{
  {
    init_simple_test("BFu7c_I");
    static STRUCT_IF_C BFu7c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I");
    check_field_offset(lv, v2, 4, "BFu7c_I.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I, BFu7c_I)
//============================================================================


struct  BFu7c_I_BFu15i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_I_BFu15i) C1{ Fc:7 Fi Fi:15}



static void Test_BFu7c_I_BFu15i()
{
  {
    init_simple_test("BFu7c_I_BFu15i");
    static STRUCT_IF_C BFu7c_I_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_I_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_I_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu15i, BFu7c_I_BFu15i)
//============================================================================


struct  BFu7c_I_BFu15ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_I_BFu15ll) C1{ Fc:7 Fi FL:15}



static void Test_BFu7c_I_BFu15ll()
{
  {
    init_simple_test("BFu7c_I_BFu15ll");
    static STRUCT_IF_C BFu7c_I_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_I_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_I_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu15ll, BFu7c_I_BFu15ll)
//============================================================================


struct  BFu7c_I_BFu15s  {
  unsigned char v1:7;
  int v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_I_BFu15s) C1{ Fc:7 Fi Fs:15}



static void Test_BFu7c_I_BFu15s()
{
  {
    init_simple_test("BFu7c_I_BFu15s");
    static STRUCT_IF_C BFu7c_I_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_I_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_I_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu15s, BFu7c_I_BFu15s)
//============================================================================


struct  BFu7c_I_BFu16i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_I_BFu16i) C1{ Fc:7 Fi Fi:16}



static void Test_BFu7c_I_BFu16i()
{
  {
    init_simple_test("BFu7c_I_BFu16i");
    static STRUCT_IF_C BFu7c_I_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_I_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_I_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu16i, BFu7c_I_BFu16i)
//============================================================================


struct  BFu7c_I_BFu16ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_I_BFu16ll) C1{ Fc:7 Fi FL:16}



static void Test_BFu7c_I_BFu16ll()
{
  {
    init_simple_test("BFu7c_I_BFu16ll");
    static STRUCT_IF_C BFu7c_I_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_I_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_I_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu16ll, BFu7c_I_BFu16ll)
//============================================================================


struct  BFu7c_I_BFu16s  {
  unsigned char v1:7;
  int v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_I_BFu16s) C1{ Fc:7 Fi Fs:16}



static void Test_BFu7c_I_BFu16s()
{
  {
    init_simple_test("BFu7c_I_BFu16s");
    static STRUCT_IF_C BFu7c_I_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_I_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_I_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu16s, BFu7c_I_BFu16s)
//============================================================================


struct  BFu7c_I_BFu17i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_I_BFu17i) C1{ Fc:7 Fi Fi:17}



static void Test_BFu7c_I_BFu17i()
{
  {
    init_simple_test("BFu7c_I_BFu17i");
    static STRUCT_IF_C BFu7c_I_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_I_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_I_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu17i, BFu7c_I_BFu17i)
//============================================================================


struct  BFu7c_I_BFu17ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_I_BFu17ll) C1{ Fc:7 Fi FL:17}



static void Test_BFu7c_I_BFu17ll()
{
  {
    init_simple_test("BFu7c_I_BFu17ll");
    static STRUCT_IF_C BFu7c_I_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_I_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_I_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu17ll, BFu7c_I_BFu17ll)
//============================================================================


struct  BFu7c_I_BFu1c  {
  unsigned char v1:7;
  int v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_I_BFu1c) C1{ Fc:7 Fi Fc:1}



static void Test_BFu7c_I_BFu1c()
{
  {
    init_simple_test("BFu7c_I_BFu1c");
    static STRUCT_IF_C BFu7c_I_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_I_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu1c, BFu7c_I_BFu1c)
//============================================================================


struct  BFu7c_I_BFu1i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_I_BFu1i) C1{ Fc:7 Fi Fi:1}



static void Test_BFu7c_I_BFu1i()
{
  {
    init_simple_test("BFu7c_I_BFu1i");
    static STRUCT_IF_C BFu7c_I_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_I_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu1i, BFu7c_I_BFu1i)
//============================================================================


struct  BFu7c_I_BFu1ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_I_BFu1ll) C1{ Fc:7 Fi FL:1}



static void Test_BFu7c_I_BFu1ll()
{
  {
    init_simple_test("BFu7c_I_BFu1ll");
    static STRUCT_IF_C BFu7c_I_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_I_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu1ll, BFu7c_I_BFu1ll)
//============================================================================


struct  BFu7c_I_BFu1s  {
  unsigned char v1:7;
  int v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_I_BFu1s) C1{ Fc:7 Fi Fs:1}



static void Test_BFu7c_I_BFu1s()
{
  {
    init_simple_test("BFu7c_I_BFu1s");
    static STRUCT_IF_C BFu7c_I_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_I_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu1s, BFu7c_I_BFu1s)
//============================================================================


struct  BFu7c_I_BFu31i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_I_BFu31i) C1{ Fc:7 Fi Fi:31}



static void Test_BFu7c_I_BFu31i()
{
  {
    init_simple_test("BFu7c_I_BFu31i");
    static STRUCT_IF_C BFu7c_I_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_I_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_I_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu31i, BFu7c_I_BFu31i)
//============================================================================


struct  BFu7c_I_BFu31ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_I_BFu31ll) C1{ Fc:7 Fi FL:31}



static void Test_BFu7c_I_BFu31ll()
{
  {
    init_simple_test("BFu7c_I_BFu31ll");
    static STRUCT_IF_C BFu7c_I_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_I_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_I_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu31ll, BFu7c_I_BFu31ll)
//============================================================================


struct  BFu7c_I_BFu32i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_I_BFu32i) C1{ Fc:7 Fi Fi:32}



static void Test_BFu7c_I_BFu32i()
{
  {
    init_simple_test("BFu7c_I_BFu32i");
    static STRUCT_IF_C BFu7c_I_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_I_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_I_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu32i, BFu7c_I_BFu32i)
//============================================================================


struct  BFu7c_I_BFu32ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_I_BFu32ll) C1{ Fc:7 Fi FL:32}



static void Test_BFu7c_I_BFu32ll()
{
  {
    init_simple_test("BFu7c_I_BFu32ll");
    static STRUCT_IF_C BFu7c_I_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_I_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_I_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu32ll, BFu7c_I_BFu32ll)
//============================================================================


struct  BFu7c_I_BFu33  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_I_BFu33) C1{ Fc:7 Fi FL:33}



static void Test_BFu7c_I_BFu33()
{
  {
    init_simple_test("BFu7c_I_BFu33");
    static STRUCT_IF_C BFu7c_I_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_I_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu33");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7c_I_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7c_I_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu33, BFu7c_I_BFu33)
//============================================================================


struct  BFu7c_I_BFu7c  {
  unsigned char v1:7;
  int v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_I_BFu7c) C1{ Fc:7 Fi Fc:7}



static void Test_BFu7c_I_BFu7c()
{
  {
    init_simple_test("BFu7c_I_BFu7c");
    static STRUCT_IF_C BFu7c_I_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_I_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu7c, BFu7c_I_BFu7c)
//============================================================================


struct  BFu7c_I_BFu7i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_I_BFu7i) C1{ Fc:7 Fi Fi:7}



static void Test_BFu7c_I_BFu7i()
{
  {
    init_simple_test("BFu7c_I_BFu7i");
    static STRUCT_IF_C BFu7c_I_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_I_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu7i, BFu7c_I_BFu7i)
//============================================================================


struct  BFu7c_I_BFu7ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_I_BFu7ll) C1{ Fc:7 Fi FL:7}



static void Test_BFu7c_I_BFu7ll()
{
  {
    init_simple_test("BFu7c_I_BFu7ll");
    static STRUCT_IF_C BFu7c_I_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_I_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu7ll, BFu7c_I_BFu7ll)
//============================================================================


struct  BFu7c_I_BFu7s  {
  unsigned char v1:7;
  int v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_I_BFu7s) C1{ Fc:7 Fi Fs:7}



static void Test_BFu7c_I_BFu7s()
{
  {
    init_simple_test("BFu7c_I_BFu7s");
    static STRUCT_IF_C BFu7c_I_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_I_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu7s, BFu7c_I_BFu7s)
//============================================================================


struct  BFu7c_I_BFu8c  {
  unsigned char v1:7;
  int v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_I_BFu8c) C1{ Fc:7 Fi Fc:8}



static void Test_BFu7c_I_BFu8c()
{
  {
    init_simple_test("BFu7c_I_BFu8c");
    static STRUCT_IF_C BFu7c_I_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_I_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_I_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu8c, BFu7c_I_BFu8c)
//============================================================================


struct  BFu7c_I_BFu8i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_I_BFu8i) C1{ Fc:7 Fi Fi:8}



static void Test_BFu7c_I_BFu8i()
{
  {
    init_simple_test("BFu7c_I_BFu8i");
    static STRUCT_IF_C BFu7c_I_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_I_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_I_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu8i, BFu7c_I_BFu8i)
//============================================================================


struct  BFu7c_I_BFu8ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_I_BFu8ll) C1{ Fc:7 Fi FL:8}



static void Test_BFu7c_I_BFu8ll()
{
  {
    init_simple_test("BFu7c_I_BFu8ll");
    static STRUCT_IF_C BFu7c_I_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_I_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_I_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu8ll, BFu7c_I_BFu8ll)
//============================================================================


struct  BFu7c_I_BFu8s  {
  unsigned char v1:7;
  int v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_I_BFu8s) C1{ Fc:7 Fi Fs:8}



static void Test_BFu7c_I_BFu8s()
{
  {
    init_simple_test("BFu7c_I_BFu8s");
    static STRUCT_IF_C BFu7c_I_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_I_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_I_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu8s, BFu7c_I_BFu8s)
//============================================================================


struct  BFu7c_I_BFu9i  {
  unsigned char v1:7;
  int v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_I_BFu9i) C1{ Fc:7 Fi Fi:9}



static void Test_BFu7c_I_BFu9i()
{
  {
    init_simple_test("BFu7c_I_BFu9i");
    static STRUCT_IF_C BFu7c_I_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_I_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_I_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu9i, BFu7c_I_BFu9i)
//============================================================================


struct  BFu7c_I_BFu9ll  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_I_BFu9ll) C1{ Fc:7 Fi FL:9}



static void Test_BFu7c_I_BFu9ll()
{
  {
    init_simple_test("BFu7c_I_BFu9ll");
    static STRUCT_IF_C BFu7c_I_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_I_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_I_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu9ll, BFu7c_I_BFu9ll)
//============================================================================


struct  BFu7c_I_BFu9s  {
  unsigned char v1:7;
  int v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_I_BFu9s) C1{ Fc:7 Fi Fs:9}



static void Test_BFu7c_I_BFu9s()
{
  {
    init_simple_test("BFu7c_I_BFu9s");
    static STRUCT_IF_C BFu7c_I_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7c_I_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_I_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_I_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_BFu9s, BFu7c_I_BFu9s)
//============================================================================


struct  BFu7c_I_C  {
  unsigned char v1:7;
  int v2;
  char v3;
};
//SIG(1 BFu7c_I_C) C1{ Fc:7 Fi Fc}



static void Test_BFu7c_I_C()
{
  {
    init_simple_test("BFu7c_I_C");
    static STRUCT_IF_C BFu7c_I_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_C");
    check_field_offset(lv, v2, 4, "BFu7c_I_C.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_C, BFu7c_I_C)
//============================================================================


struct  BFu7c_I_D  {
  unsigned char v1:7;
  int v2;
  double v3;
};
//SIG(1 BFu7c_I_D) C1{ Fc:7 Fi FL}



static void Test_BFu7c_I_D()
{
  {
    init_simple_test("BFu7c_I_D");
    static STRUCT_IF_C BFu7c_I_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_I_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_D");
    check_field_offset(lv, v2, 4, "BFu7c_I_D.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_D, BFu7c_I_D)
//============================================================================


struct  BFu7c_I_F  {
  unsigned char v1:7;
  int v2;
  float v3;
};
//SIG(1 BFu7c_I_F) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_I_F()
{
  {
    init_simple_test("BFu7c_I_F");
    static STRUCT_IF_C BFu7c_I_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_F");
    check_field_offset(lv, v2, 4, "BFu7c_I_F.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_F, BFu7c_I_F)
//============================================================================


struct  BFu7c_I_I  {
  unsigned char v1:7;
  int v2;
  int v3;
};
//SIG(1 BFu7c_I_I) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_I_I()
{
  {
    init_simple_test("BFu7c_I_I");
    static STRUCT_IF_C BFu7c_I_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_I");
    check_field_offset(lv, v2, 4, "BFu7c_I_I.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_I, BFu7c_I_I)
//============================================================================


struct  BFu7c_I_Ip  {
  unsigned char v1:7;
  int v2;
  int *v3;
};
//SIG(1 BFu7c_I_Ip) C1{ Fc:7 Fi Fp}



static void Test_BFu7c_I_Ip()
{
  {
    init_simple_test("BFu7c_I_Ip");
    static STRUCT_IF_C BFu7c_I_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_Ip");
    check_field_offset(lv, v2, 4, "BFu7c_I_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_Ip, BFu7c_I_Ip)
//============================================================================


struct  BFu7c_I_L  {
  unsigned char v1:7;
  int v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_I_L) C1{ Fc:7 Fi FL}



static void Test_BFu7c_I_L()
{
  {
    init_simple_test("BFu7c_I_L");
    static STRUCT_IF_C BFu7c_I_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_I_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_L");
    check_field_offset(lv, v2, 4, "BFu7c_I_L.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_L, BFu7c_I_L)
//============================================================================


struct  BFu7c_I_S  {
  unsigned char v1:7;
  int v2;
  short v3;
};
//SIG(1 BFu7c_I_S) C1{ Fc:7 Fi Fs}



static void Test_BFu7c_I_S()
{
  {
    init_simple_test("BFu7c_I_S");
    static STRUCT_IF_C BFu7c_I_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_S");
    check_field_offset(lv, v2, 4, "BFu7c_I_S.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_S, BFu7c_I_S)
//============================================================================


struct  BFu7c_I_Uc  {
  unsigned char v1:7;
  int v2;
  unsigned char v3;
};
//SIG(1 BFu7c_I_Uc) C1{ Fc:7 Fi Fc}



static void Test_BFu7c_I_Uc()
{
  {
    init_simple_test("BFu7c_I_Uc");
    static STRUCT_IF_C BFu7c_I_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_Uc");
    check_field_offset(lv, v2, 4, "BFu7c_I_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_Uc, BFu7c_I_Uc)
//============================================================================


struct  BFu7c_I_Ui  {
  unsigned char v1:7;
  int v2;
  unsigned int v3;
};
//SIG(1 BFu7c_I_Ui) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_I_Ui()
{
  {
    init_simple_test("BFu7c_I_Ui");
    static STRUCT_IF_C BFu7c_I_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_Ui");
    check_field_offset(lv, v2, 4, "BFu7c_I_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_Ui, BFu7c_I_Ui)
//============================================================================


struct  BFu7c_I_Ul  {
  unsigned char v1:7;
  int v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_I_Ul) C1{ Fc:7 Fi FL}



static void Test_BFu7c_I_Ul()
{
  {
    init_simple_test("BFu7c_I_Ul");
    static STRUCT_IF_C BFu7c_I_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_I_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_Ul");
    check_field_offset(lv, v2, 4, "BFu7c_I_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_Ul, BFu7c_I_Ul)
//============================================================================


struct  BFu7c_I_Us  {
  unsigned char v1:7;
  int v2;
  unsigned short v3;
};
//SIG(1 BFu7c_I_Us) C1{ Fc:7 Fi Fs}



static void Test_BFu7c_I_Us()
{
  {
    init_simple_test("BFu7c_I_Us");
    static STRUCT_IF_C BFu7c_I_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_I_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_I_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_Us");
    check_field_offset(lv, v2, 4, "BFu7c_I_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_Us, BFu7c_I_Us)
//============================================================================


struct  BFu7c_I_Vp  {
  unsigned char v1:7;
  int v2;
  void *v3;
};
//SIG(1 BFu7c_I_Vp) C1{ Fc:7 Fi Fp}



static void Test_BFu7c_I_Vp()
{
  {
    init_simple_test("BFu7c_I_Vp");
    static STRUCT_IF_C BFu7c_I_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_I_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_I_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_I_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_I_Vp");
    check_field_offset(lv, v2, 4, "BFu7c_I_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7c_I_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_I_Vp, BFu7c_I_Vp)
//============================================================================


struct  BFu7c_Ip  {
  unsigned char v1:7;
  int *v2;
};
//SIG(1 BFu7c_Ip) C1{ Fc:7 Fp}



static void Test_BFu7c_Ip()
{
  {
    init_simple_test("BFu7c_Ip");
    static STRUCT_IF_C BFu7c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip, BFu7c_Ip)
//============================================================================


struct  BFu7c_Ip_BFu15i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_Ip_BFu15i) C1{ Fc:7 Fp Fi:15}



static void Test_BFu7c_Ip_BFu15i()
{
  {
    init_simple_test("BFu7c_Ip_BFu15i");
    static STRUCT_IF_C BFu7c_Ip_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7c_Ip_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7c_Ip_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu15i, BFu7c_Ip_BFu15i)
//============================================================================


struct  BFu7c_Ip_BFu15ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_Ip_BFu15ll) C1{ Fc:7 Fp FL:15}



static void Test_BFu7c_Ip_BFu15ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu15ll");
    static STRUCT_IF_C BFu7c_Ip_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7c_Ip_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7c_Ip_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu15ll, BFu7c_Ip_BFu15ll)
//============================================================================


struct  BFu7c_Ip_BFu15s  {
  unsigned char v1:7;
  int *v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_Ip_BFu15s) C1{ Fc:7 Fp Fs:15}



static void Test_BFu7c_Ip_BFu15s()
{
  {
    init_simple_test("BFu7c_Ip_BFu15s");
    static STRUCT_IF_C BFu7c_Ip_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7c_Ip_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7c_Ip_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu15s, BFu7c_Ip_BFu15s)
//============================================================================


struct  BFu7c_Ip_BFu16i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_Ip_BFu16i) C1{ Fc:7 Fp Fi:16}



static void Test_BFu7c_Ip_BFu16i()
{
  {
    init_simple_test("BFu7c_Ip_BFu16i");
    static STRUCT_IF_C BFu7c_Ip_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7c_Ip_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7c_Ip_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu16i, BFu7c_Ip_BFu16i)
//============================================================================


struct  BFu7c_Ip_BFu16ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_Ip_BFu16ll) C1{ Fc:7 Fp FL:16}



static void Test_BFu7c_Ip_BFu16ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu16ll");
    static STRUCT_IF_C BFu7c_Ip_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7c_Ip_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7c_Ip_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu16ll, BFu7c_Ip_BFu16ll)
//============================================================================


struct  BFu7c_Ip_BFu16s  {
  unsigned char v1:7;
  int *v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_Ip_BFu16s) C1{ Fc:7 Fp Fs:16}



static void Test_BFu7c_Ip_BFu16s()
{
  {
    init_simple_test("BFu7c_Ip_BFu16s");
    static STRUCT_IF_C BFu7c_Ip_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7c_Ip_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7c_Ip_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu16s, BFu7c_Ip_BFu16s)
//============================================================================


struct  BFu7c_Ip_BFu17i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_Ip_BFu17i) C1{ Fc:7 Fp Fi:17}



static void Test_BFu7c_Ip_BFu17i()
{
  {
    init_simple_test("BFu7c_Ip_BFu17i");
    static STRUCT_IF_C BFu7c_Ip_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7c_Ip_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7c_Ip_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu17i, BFu7c_Ip_BFu17i)
//============================================================================


struct  BFu7c_Ip_BFu17ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_Ip_BFu17ll) C1{ Fc:7 Fp FL:17}



static void Test_BFu7c_Ip_BFu17ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu17ll");
    static STRUCT_IF_C BFu7c_Ip_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7c_Ip_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7c_Ip_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu17ll, BFu7c_Ip_BFu17ll)
//============================================================================


struct  BFu7c_Ip_BFu1c  {
  unsigned char v1:7;
  int *v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_Ip_BFu1c) C1{ Fc:7 Fp Fc:1}



static void Test_BFu7c_Ip_BFu1c()
{
  {
    init_simple_test("BFu7c_Ip_BFu1c");
    static STRUCT_IF_C BFu7c_Ip_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7c_Ip_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu1c, BFu7c_Ip_BFu1c)
//============================================================================


struct  BFu7c_Ip_BFu1i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_Ip_BFu1i) C1{ Fc:7 Fp Fi:1}



static void Test_BFu7c_Ip_BFu1i()
{
  {
    init_simple_test("BFu7c_Ip_BFu1i");
    static STRUCT_IF_C BFu7c_Ip_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7c_Ip_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu1i, BFu7c_Ip_BFu1i)
//============================================================================


struct  BFu7c_Ip_BFu1ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_Ip_BFu1ll) C1{ Fc:7 Fp FL:1}



static void Test_BFu7c_Ip_BFu1ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu1ll");
    static STRUCT_IF_C BFu7c_Ip_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7c_Ip_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu1ll, BFu7c_Ip_BFu1ll)
//============================================================================


struct  BFu7c_Ip_BFu1s  {
  unsigned char v1:7;
  int *v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_Ip_BFu1s) C1{ Fc:7 Fp Fs:1}



static void Test_BFu7c_Ip_BFu1s()
{
  {
    init_simple_test("BFu7c_Ip_BFu1s");
    static STRUCT_IF_C BFu7c_Ip_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7c_Ip_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu1s, BFu7c_Ip_BFu1s)
//============================================================================


struct  BFu7c_Ip_BFu31i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_Ip_BFu31i) C1{ Fc:7 Fp Fi:31}



static void Test_BFu7c_Ip_BFu31i()
{
  {
    init_simple_test("BFu7c_Ip_BFu31i");
    static STRUCT_IF_C BFu7c_Ip_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7c_Ip_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7c_Ip_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu31i, BFu7c_Ip_BFu31i)
//============================================================================


struct  BFu7c_Ip_BFu31ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_Ip_BFu31ll) C1{ Fc:7 Fp FL:31}



static void Test_BFu7c_Ip_BFu31ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu31ll");
    static STRUCT_IF_C BFu7c_Ip_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7c_Ip_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7c_Ip_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu31ll, BFu7c_Ip_BFu31ll)
//============================================================================


struct  BFu7c_Ip_BFu32i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_Ip_BFu32i) C1{ Fc:7 Fp Fi:32}



static void Test_BFu7c_Ip_BFu32i()
{
  {
    init_simple_test("BFu7c_Ip_BFu32i");
    static STRUCT_IF_C BFu7c_Ip_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7c_Ip_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7c_Ip_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu32i, BFu7c_Ip_BFu32i)
//============================================================================


struct  BFu7c_Ip_BFu32ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_Ip_BFu32ll) C1{ Fc:7 Fp FL:32}



static void Test_BFu7c_Ip_BFu32ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu32ll");
    static STRUCT_IF_C BFu7c_Ip_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7c_Ip_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7c_Ip_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu32ll, BFu7c_Ip_BFu32ll)
//============================================================================


struct  BFu7c_Ip_BFu33  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_Ip_BFu33) C1{ Fc:7 Fp FL:33}



static void Test_BFu7c_Ip_BFu33()
{
  {
    init_simple_test("BFu7c_Ip_BFu33");
    static STRUCT_IF_C BFu7c_Ip_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ip_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu7c_Ip_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu7c_Ip_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu33, BFu7c_Ip_BFu33)
//============================================================================


struct  BFu7c_Ip_BFu7c  {
  unsigned char v1:7;
  int *v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_Ip_BFu7c) C1{ Fc:7 Fp Fc:7}



static void Test_BFu7c_Ip_BFu7c()
{
  {
    init_simple_test("BFu7c_Ip_BFu7c");
    static STRUCT_IF_C BFu7c_Ip_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7c_Ip_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu7c, BFu7c_Ip_BFu7c)
//============================================================================


struct  BFu7c_Ip_BFu7i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_Ip_BFu7i) C1{ Fc:7 Fp Fi:7}



static void Test_BFu7c_Ip_BFu7i()
{
  {
    init_simple_test("BFu7c_Ip_BFu7i");
    static STRUCT_IF_C BFu7c_Ip_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7c_Ip_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu7i, BFu7c_Ip_BFu7i)
//============================================================================


struct  BFu7c_Ip_BFu7ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_Ip_BFu7ll) C1{ Fc:7 Fp FL:7}



static void Test_BFu7c_Ip_BFu7ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu7ll");
    static STRUCT_IF_C BFu7c_Ip_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7c_Ip_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu7ll, BFu7c_Ip_BFu7ll)
//============================================================================


struct  BFu7c_Ip_BFu7s  {
  unsigned char v1:7;
  int *v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_Ip_BFu7s) C1{ Fc:7 Fp Fs:7}



static void Test_BFu7c_Ip_BFu7s()
{
  {
    init_simple_test("BFu7c_Ip_BFu7s");
    static STRUCT_IF_C BFu7c_Ip_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7c_Ip_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu7s, BFu7c_Ip_BFu7s)
//============================================================================


struct  BFu7c_Ip_BFu8c  {
  unsigned char v1:7;
  int *v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_Ip_BFu8c) C1{ Fc:7 Fp Fc:8}



static void Test_BFu7c_Ip_BFu8c()
{
  {
    init_simple_test("BFu7c_Ip_BFu8c");
    static STRUCT_IF_C BFu7c_Ip_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7c_Ip_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7c_Ip_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu8c, BFu7c_Ip_BFu8c)
//============================================================================


struct  BFu7c_Ip_BFu8i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_Ip_BFu8i) C1{ Fc:7 Fp Fi:8}



static void Test_BFu7c_Ip_BFu8i()
{
  {
    init_simple_test("BFu7c_Ip_BFu8i");
    static STRUCT_IF_C BFu7c_Ip_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7c_Ip_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7c_Ip_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu8i, BFu7c_Ip_BFu8i)
//============================================================================


struct  BFu7c_Ip_BFu8ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_Ip_BFu8ll) C1{ Fc:7 Fp FL:8}



static void Test_BFu7c_Ip_BFu8ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu8ll");
    static STRUCT_IF_C BFu7c_Ip_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7c_Ip_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7c_Ip_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu8ll, BFu7c_Ip_BFu8ll)
//============================================================================


struct  BFu7c_Ip_BFu8s  {
  unsigned char v1:7;
  int *v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_Ip_BFu8s) C1{ Fc:7 Fp Fs:8}



static void Test_BFu7c_Ip_BFu8s()
{
  {
    init_simple_test("BFu7c_Ip_BFu8s");
    static STRUCT_IF_C BFu7c_Ip_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7c_Ip_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7c_Ip_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu8s, BFu7c_Ip_BFu8s)
//============================================================================


struct  BFu7c_Ip_BFu9i  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_Ip_BFu9i) C1{ Fc:7 Fp Fi:9}



static void Test_BFu7c_Ip_BFu9i()
{
  {
    init_simple_test("BFu7c_Ip_BFu9i");
    static STRUCT_IF_C BFu7c_Ip_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7c_Ip_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7c_Ip_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu9i, BFu7c_Ip_BFu9i)
//============================================================================


struct  BFu7c_Ip_BFu9ll  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_Ip_BFu9ll) C1{ Fc:7 Fp FL:9}



static void Test_BFu7c_Ip_BFu9ll()
{
  {
    init_simple_test("BFu7c_Ip_BFu9ll");
    static STRUCT_IF_C BFu7c_Ip_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7c_Ip_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7c_Ip_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu9ll, BFu7c_Ip_BFu9ll)
//============================================================================


struct  BFu7c_Ip_BFu9s  {
  unsigned char v1:7;
  int *v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_Ip_BFu9s) C1{ Fc:7 Fp Fs:9}



static void Test_BFu7c_Ip_BFu9s()
{
  {
    init_simple_test("BFu7c_Ip_BFu9s");
    static STRUCT_IF_C BFu7c_Ip_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7c_Ip_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7c_Ip_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_BFu9s, BFu7c_Ip_BFu9s)
//============================================================================


struct  BFu7c_Ip_C  {
  unsigned char v1:7;
  int *v2;
  char v3;
};
//SIG(1 BFu7c_Ip_C) C1{ Fc:7 Fp Fc}



static void Test_BFu7c_Ip_C()
{
  {
    init_simple_test("BFu7c_Ip_C");
    static STRUCT_IF_C BFu7c_Ip_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_C, BFu7c_Ip_C)
//============================================================================


struct  BFu7c_Ip_D  {
  unsigned char v1:7;
  int *v2;
  double v3;
};
//SIG(1 BFu7c_Ip_D) C1{ Fc:7 Fp FL}



static void Test_BFu7c_Ip_D()
{
  {
    init_simple_test("BFu7c_Ip_D");
    static STRUCT_IF_C BFu7c_Ip_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ip_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_D, BFu7c_Ip_D)
//============================================================================


struct  BFu7c_Ip_F  {
  unsigned char v1:7;
  int *v2;
  float v3;
};
//SIG(1 BFu7c_Ip_F) C1{ Fc:7 Fp Fi}



static void Test_BFu7c_Ip_F()
{
  {
    init_simple_test("BFu7c_Ip_F");
    static STRUCT_IF_C BFu7c_Ip_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_F, BFu7c_Ip_F)
//============================================================================


struct  BFu7c_Ip_I  {
  unsigned char v1:7;
  int *v2;
  int v3;
};
//SIG(1 BFu7c_Ip_I) C1{ Fc:7 Fp Fi}



static void Test_BFu7c_Ip_I()
{
  {
    init_simple_test("BFu7c_Ip_I");
    static STRUCT_IF_C BFu7c_Ip_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_I, BFu7c_Ip_I)
//============================================================================


struct  BFu7c_Ip_Ip  {
  unsigned char v1:7;
  int *v2;
  int *v3;
};
//SIG(1 BFu7c_Ip_Ip) C1{ Fc:7 Fp[2]}



static void Test_BFu7c_Ip_Ip()
{
  {
    init_simple_test("BFu7c_Ip_Ip");
    static STRUCT_IF_C BFu7c_Ip_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_Ip, BFu7c_Ip_Ip)
//============================================================================


struct  BFu7c_Ip_L  {
  unsigned char v1:7;
  int *v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_Ip_L) C1{ Fc:7 Fp FL}



static void Test_BFu7c_Ip_L()
{
  {
    init_simple_test("BFu7c_Ip_L");
    static STRUCT_IF_C BFu7c_Ip_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ip_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_L, BFu7c_Ip_L)
//============================================================================


struct  BFu7c_Ip_S  {
  unsigned char v1:7;
  int *v2;
  short v3;
};
//SIG(1 BFu7c_Ip_S) C1{ Fc:7 Fp Fs}



static void Test_BFu7c_Ip_S()
{
  {
    init_simple_test("BFu7c_Ip_S");
    static STRUCT_IF_C BFu7c_Ip_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_S, BFu7c_Ip_S)
//============================================================================


struct  BFu7c_Ip_Uc  {
  unsigned char v1:7;
  int *v2;
  unsigned char v3;
};
//SIG(1 BFu7c_Ip_Uc) C1{ Fc:7 Fp Fc}



static void Test_BFu7c_Ip_Uc()
{
  {
    init_simple_test("BFu7c_Ip_Uc");
    static STRUCT_IF_C BFu7c_Ip_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_Uc, BFu7c_Ip_Uc)
//============================================================================


struct  BFu7c_Ip_Ui  {
  unsigned char v1:7;
  int *v2;
  unsigned int v3;
};
//SIG(1 BFu7c_Ip_Ui) C1{ Fc:7 Fp Fi}



static void Test_BFu7c_Ip_Ui()
{
  {
    init_simple_test("BFu7c_Ip_Ui");
    static STRUCT_IF_C BFu7c_Ip_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_Ui, BFu7c_Ip_Ui)
//============================================================================


struct  BFu7c_Ip_Ul  {
  unsigned char v1:7;
  int *v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_Ip_Ul) C1{ Fc:7 Fp FL}



static void Test_BFu7c_Ip_Ul()
{
  {
    init_simple_test("BFu7c_Ip_Ul");
    static STRUCT_IF_C BFu7c_Ip_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ip_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_Ul, BFu7c_Ip_Ul)
//============================================================================


struct  BFu7c_Ip_Us  {
  unsigned char v1:7;
  int *v2;
  unsigned short v3;
};
//SIG(1 BFu7c_Ip_Us) C1{ Fc:7 Fp Fs}



static void Test_BFu7c_Ip_Us()
{
  {
    init_simple_test("BFu7c_Ip_Us");
    static STRUCT_IF_C BFu7c_Ip_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_Us, BFu7c_Ip_Us)
//============================================================================


struct  BFu7c_Ip_Vp  {
  unsigned char v1:7;
  int *v2;
  void *v3;
};
//SIG(1 BFu7c_Ip_Vp) C1{ Fc:7 Fp[2]}



static void Test_BFu7c_Ip_Vp()
{
  {
    init_simple_test("BFu7c_Ip_Vp");
    static STRUCT_IF_C BFu7c_Ip_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Ip_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ip_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ip_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ip_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ip_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Ip_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ip_Vp, BFu7c_Ip_Vp)
//============================================================================


struct  BFu7c_L  {
  unsigned char v1:7;
  __tsi64 v2;
};
//SIG(1 BFu7c_L) C1{ Fc:7 FL}



static void Test_BFu7c_L()
{
  {
    init_simple_test("BFu7c_L");
    static STRUCT_IF_C BFu7c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L, BFu7c_L)
//============================================================================


struct  BFu7c_L_BFu15i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_L_BFu15i) C1{ Fc:7 FL Fi:15}



static void Test_BFu7c_L_BFu15i()
{
  {
    init_simple_test("BFu7c_L_BFu15i");
    static STRUCT_IF_C BFu7c_L_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_L_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_L_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu15i, BFu7c_L_BFu15i)
//============================================================================


struct  BFu7c_L_BFu15ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_L_BFu15ll) C1{ Fc:7 FL FL:15}



static void Test_BFu7c_L_BFu15ll()
{
  {
    init_simple_test("BFu7c_L_BFu15ll");
    static STRUCT_IF_C BFu7c_L_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_L_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_L_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu15ll, BFu7c_L_BFu15ll)
//============================================================================


struct  BFu7c_L_BFu15s  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_L_BFu15s) C1{ Fc:7 FL Fs:15}



static void Test_BFu7c_L_BFu15s()
{
  {
    init_simple_test("BFu7c_L_BFu15s");
    static STRUCT_IF_C BFu7c_L_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_L_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_L_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu15s, BFu7c_L_BFu15s)
//============================================================================


struct  BFu7c_L_BFu16i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_L_BFu16i) C1{ Fc:7 FL Fi:16}



static void Test_BFu7c_L_BFu16i()
{
  {
    init_simple_test("BFu7c_L_BFu16i");
    static STRUCT_IF_C BFu7c_L_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_L_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_L_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu16i, BFu7c_L_BFu16i)
//============================================================================


struct  BFu7c_L_BFu16ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_L_BFu16ll) C1{ Fc:7 FL FL:16}



static void Test_BFu7c_L_BFu16ll()
{
  {
    init_simple_test("BFu7c_L_BFu16ll");
    static STRUCT_IF_C BFu7c_L_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_L_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_L_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu16ll, BFu7c_L_BFu16ll)
//============================================================================


struct  BFu7c_L_BFu16s  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_L_BFu16s) C1{ Fc:7 FL Fs:16}



static void Test_BFu7c_L_BFu16s()
{
  {
    init_simple_test("BFu7c_L_BFu16s");
    static STRUCT_IF_C BFu7c_L_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_L_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_L_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu16s, BFu7c_L_BFu16s)
//============================================================================


struct  BFu7c_L_BFu17i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_L_BFu17i) C1{ Fc:7 FL Fi:17}



static void Test_BFu7c_L_BFu17i()
{
  {
    init_simple_test("BFu7c_L_BFu17i");
    static STRUCT_IF_C BFu7c_L_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7c_L_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7c_L_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu17i, BFu7c_L_BFu17i)
//============================================================================


struct  BFu7c_L_BFu17ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_L_BFu17ll) C1{ Fc:7 FL FL:17}



static void Test_BFu7c_L_BFu17ll()
{
  {
    init_simple_test("BFu7c_L_BFu17ll");
    static STRUCT_IF_C BFu7c_L_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7c_L_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7c_L_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu17ll, BFu7c_L_BFu17ll)
//============================================================================


struct  BFu7c_L_BFu1c  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_L_BFu1c) C1{ Fc:7 FL Fc:1}



static void Test_BFu7c_L_BFu1c()
{
  {
    init_simple_test("BFu7c_L_BFu1c");
    static STRUCT_IF_C BFu7c_L_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_L_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu1c, BFu7c_L_BFu1c)
//============================================================================


struct  BFu7c_L_BFu1i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_L_BFu1i) C1{ Fc:7 FL Fi:1}



static void Test_BFu7c_L_BFu1i()
{
  {
    init_simple_test("BFu7c_L_BFu1i");
    static STRUCT_IF_C BFu7c_L_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_L_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu1i, BFu7c_L_BFu1i)
//============================================================================


struct  BFu7c_L_BFu1ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_L_BFu1ll) C1{ Fc:7 FL FL:1}



static void Test_BFu7c_L_BFu1ll()
{
  {
    init_simple_test("BFu7c_L_BFu1ll");
    static STRUCT_IF_C BFu7c_L_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_L_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu1ll, BFu7c_L_BFu1ll)
//============================================================================


struct  BFu7c_L_BFu1s  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_L_BFu1s) C1{ Fc:7 FL Fs:1}



static void Test_BFu7c_L_BFu1s()
{
  {
    init_simple_test("BFu7c_L_BFu1s");
    static STRUCT_IF_C BFu7c_L_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_L_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu1s, BFu7c_L_BFu1s)
//============================================================================


struct  BFu7c_L_BFu31i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_L_BFu31i) C1{ Fc:7 FL Fi:31}



static void Test_BFu7c_L_BFu31i()
{
  {
    init_simple_test("BFu7c_L_BFu31i");
    static STRUCT_IF_C BFu7c_L_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7c_L_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7c_L_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu31i, BFu7c_L_BFu31i)
//============================================================================


struct  BFu7c_L_BFu31ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_L_BFu31ll) C1{ Fc:7 FL FL:31}



static void Test_BFu7c_L_BFu31ll()
{
  {
    init_simple_test("BFu7c_L_BFu31ll");
    static STRUCT_IF_C BFu7c_L_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7c_L_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7c_L_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu31ll, BFu7c_L_BFu31ll)
//============================================================================


struct  BFu7c_L_BFu32i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_L_BFu32i) C1{ Fc:7 FL Fi:32}



static void Test_BFu7c_L_BFu32i()
{
  {
    init_simple_test("BFu7c_L_BFu32i");
    static STRUCT_IF_C BFu7c_L_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7c_L_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7c_L_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu32i, BFu7c_L_BFu32i)
//============================================================================


struct  BFu7c_L_BFu32ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_L_BFu32ll) C1{ Fc:7 FL FL:32}



static void Test_BFu7c_L_BFu32ll()
{
  {
    init_simple_test("BFu7c_L_BFu32ll");
    static STRUCT_IF_C BFu7c_L_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7c_L_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7c_L_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu32ll, BFu7c_L_BFu32ll)
//============================================================================


struct  BFu7c_L_BFu33  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_L_BFu33) C1{ Fc:7 FL FL:33}



static void Test_BFu7c_L_BFu33()
{
  {
    init_simple_test("BFu7c_L_BFu33");
    static STRUCT_IF_C BFu7c_L_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_L_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7c_L_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7c_L_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu33, BFu7c_L_BFu33)
//============================================================================


struct  BFu7c_L_BFu7c  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_L_BFu7c) C1{ Fc:7 FL Fc:7}



static void Test_BFu7c_L_BFu7c()
{
  {
    init_simple_test("BFu7c_L_BFu7c");
    static STRUCT_IF_C BFu7c_L_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_L_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu7c, BFu7c_L_BFu7c)
//============================================================================


struct  BFu7c_L_BFu7i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_L_BFu7i) C1{ Fc:7 FL Fi:7}



static void Test_BFu7c_L_BFu7i()
{
  {
    init_simple_test("BFu7c_L_BFu7i");
    static STRUCT_IF_C BFu7c_L_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_L_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu7i, BFu7c_L_BFu7i)
//============================================================================


struct  BFu7c_L_BFu7ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_L_BFu7ll) C1{ Fc:7 FL FL:7}



static void Test_BFu7c_L_BFu7ll()
{
  {
    init_simple_test("BFu7c_L_BFu7ll");
    static STRUCT_IF_C BFu7c_L_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_L_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu7ll, BFu7c_L_BFu7ll)
//============================================================================


struct  BFu7c_L_BFu7s  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_L_BFu7s) C1{ Fc:7 FL Fs:7}



static void Test_BFu7c_L_BFu7s()
{
  {
    init_simple_test("BFu7c_L_BFu7s");
    static STRUCT_IF_C BFu7c_L_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_L_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu7s, BFu7c_L_BFu7s)
//============================================================================


struct  BFu7c_L_BFu8c  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_L_BFu8c) C1{ Fc:7 FL Fc:8}



static void Test_BFu7c_L_BFu8c()
{
  {
    init_simple_test("BFu7c_L_BFu8c");
    static STRUCT_IF_C BFu7c_L_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_L_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_L_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu8c, BFu7c_L_BFu8c)
//============================================================================


struct  BFu7c_L_BFu8i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_L_BFu8i) C1{ Fc:7 FL Fi:8}



static void Test_BFu7c_L_BFu8i()
{
  {
    init_simple_test("BFu7c_L_BFu8i");
    static STRUCT_IF_C BFu7c_L_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_L_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_L_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu8i, BFu7c_L_BFu8i)
//============================================================================


struct  BFu7c_L_BFu8ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_L_BFu8ll) C1{ Fc:7 FL FL:8}



static void Test_BFu7c_L_BFu8ll()
{
  {
    init_simple_test("BFu7c_L_BFu8ll");
    static STRUCT_IF_C BFu7c_L_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_L_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_L_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu8ll, BFu7c_L_BFu8ll)
//============================================================================


struct  BFu7c_L_BFu8s  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_L_BFu8s) C1{ Fc:7 FL Fs:8}



static void Test_BFu7c_L_BFu8s()
{
  {
    init_simple_test("BFu7c_L_BFu8s");
    static STRUCT_IF_C BFu7c_L_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_L_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_L_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu8s, BFu7c_L_BFu8s)
//============================================================================


struct  BFu7c_L_BFu9i  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_L_BFu9i) C1{ Fc:7 FL Fi:9}



static void Test_BFu7c_L_BFu9i()
{
  {
    init_simple_test("BFu7c_L_BFu9i");
    static STRUCT_IF_C BFu7c_L_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_L_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_L_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu9i, BFu7c_L_BFu9i)
//============================================================================


struct  BFu7c_L_BFu9ll  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_L_BFu9ll) C1{ Fc:7 FL FL:9}



static void Test_BFu7c_L_BFu9ll()
{
  {
    init_simple_test("BFu7c_L_BFu9ll");
    static STRUCT_IF_C BFu7c_L_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_L_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_L_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu9ll, BFu7c_L_BFu9ll)
//============================================================================


struct  BFu7c_L_BFu9s  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_L_BFu9s) C1{ Fc:7 FL Fs:9}



static void Test_BFu7c_L_BFu9s()
{
  {
    init_simple_test("BFu7c_L_BFu9s");
    static STRUCT_IF_C BFu7c_L_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_L_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_L_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_BFu9s, BFu7c_L_BFu9s)
//============================================================================


struct  BFu7c_L_C  {
  unsigned char v1:7;
  __tsi64 v2;
  char v3;
};
//SIG(1 BFu7c_L_C) C1{ Fc:7 FL Fc}



static void Test_BFu7c_L_C()
{
  {
    init_simple_test("BFu7c_L_C");
    static STRUCT_IF_C BFu7c_L_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_C, BFu7c_L_C)
//============================================================================


struct  BFu7c_L_D  {
  unsigned char v1:7;
  __tsi64 v2;
  double v3;
};
//SIG(1 BFu7c_L_D) C1{ Fc:7 FL[2]}



static void Test_BFu7c_L_D()
{
  {
    init_simple_test("BFu7c_L_D");
    static STRUCT_IF_C BFu7c_L_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_L_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_D, BFu7c_L_D)
//============================================================================


struct  BFu7c_L_F  {
  unsigned char v1:7;
  __tsi64 v2;
  float v3;
};
//SIG(1 BFu7c_L_F) C1{ Fc:7 FL Fi}



static void Test_BFu7c_L_F()
{
  {
    init_simple_test("BFu7c_L_F");
    static STRUCT_IF_C BFu7c_L_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_F, BFu7c_L_F)
//============================================================================


struct  BFu7c_L_I  {
  unsigned char v1:7;
  __tsi64 v2;
  int v3;
};
//SIG(1 BFu7c_L_I) C1{ Fc:7 FL Fi}



static void Test_BFu7c_L_I()
{
  {
    init_simple_test("BFu7c_L_I");
    static STRUCT_IF_C BFu7c_L_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_I, BFu7c_L_I)
//============================================================================


struct  BFu7c_L_Ip  {
  unsigned char v1:7;
  __tsi64 v2;
  int *v3;
};
//SIG(1 BFu7c_L_Ip) C1{ Fc:7 FL Fp}



static void Test_BFu7c_L_Ip()
{
  {
    init_simple_test("BFu7c_L_Ip");
    static STRUCT_IF_C BFu7c_L_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_Ip, BFu7c_L_Ip)
//============================================================================


struct  BFu7c_L_L  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_L_L) C1{ Fc:7 FL[2]}



static void Test_BFu7c_L_L()
{
  {
    init_simple_test("BFu7c_L_L");
    static STRUCT_IF_C BFu7c_L_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_L_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_L, BFu7c_L_L)
//============================================================================


struct  BFu7c_L_S  {
  unsigned char v1:7;
  __tsi64 v2;
  short v3;
};
//SIG(1 BFu7c_L_S) C1{ Fc:7 FL Fs}



static void Test_BFu7c_L_S()
{
  {
    init_simple_test("BFu7c_L_S");
    static STRUCT_IF_C BFu7c_L_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_S, BFu7c_L_S)
//============================================================================


struct  BFu7c_L_Uc  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned char v3;
};
//SIG(1 BFu7c_L_Uc) C1{ Fc:7 FL Fc}



static void Test_BFu7c_L_Uc()
{
  {
    init_simple_test("BFu7c_L_Uc");
    static STRUCT_IF_C BFu7c_L_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_Uc, BFu7c_L_Uc)
//============================================================================


struct  BFu7c_L_Ui  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned int v3;
};
//SIG(1 BFu7c_L_Ui) C1{ Fc:7 FL Fi}



static void Test_BFu7c_L_Ui()
{
  {
    init_simple_test("BFu7c_L_Ui");
    static STRUCT_IF_C BFu7c_L_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_Ui, BFu7c_L_Ui)
//============================================================================


struct  BFu7c_L_Ul  {
  unsigned char v1:7;
  __tsi64 v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_L_Ul) C1{ Fc:7 FL[2]}



static void Test_BFu7c_L_Ul()
{
  {
    init_simple_test("BFu7c_L_Ul");
    static STRUCT_IF_C BFu7c_L_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_L_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_Ul, BFu7c_L_Ul)
//============================================================================


struct  BFu7c_L_Us  {
  unsigned char v1:7;
  __tsi64 v2;
  unsigned short v3;
};
//SIG(1 BFu7c_L_Us) C1{ Fc:7 FL Fs}



static void Test_BFu7c_L_Us()
{
  {
    init_simple_test("BFu7c_L_Us");
    static STRUCT_IF_C BFu7c_L_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_Us, BFu7c_L_Us)
//============================================================================


struct  BFu7c_L_Vp  {
  unsigned char v1:7;
  __tsi64 v2;
  void *v3;
};
//SIG(1 BFu7c_L_Vp) C1{ Fc:7 FL Fp}



static void Test_BFu7c_L_Vp()
{
  {
    init_simple_test("BFu7c_L_Vp");
    static STRUCT_IF_C BFu7c_L_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_L_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_L_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_L_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_L_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_L_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_L_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_L_Vp, BFu7c_L_Vp)
//============================================================================


struct  BFu7c_S  {
  unsigned char v1:7;
  short v2;
};
//SIG(1 BFu7c_S) C1{ Fc:7 Fs}



static void Test_BFu7c_S()
{
  {
    init_simple_test("BFu7c_S");
    static STRUCT_IF_C BFu7c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S");
    check_field_offset(lv, v2, 2, "BFu7c_S.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S, BFu7c_S)
//============================================================================


struct  BFu7c_S_BFu15i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_S_BFu15i) C1{ Fc:7 Fs Fi:15}



static void Test_BFu7c_S_BFu15i()
{
  {
    init_simple_test("BFu7c_S_BFu15i");
    static STRUCT_IF_C BFu7c_S_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu15i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_S_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_S_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu15i, BFu7c_S_BFu15i)
//============================================================================


struct  BFu7c_S_BFu15ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_S_BFu15ll) C1{ Fc:7 Fs FL:15}



static void Test_BFu7c_S_BFu15ll()
{
  {
    init_simple_test("BFu7c_S_BFu15ll");
    static STRUCT_IF_C BFu7c_S_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_S_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_S_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu15ll, BFu7c_S_BFu15ll)
//============================================================================


struct  BFu7c_S_BFu15s  {
  unsigned char v1:7;
  short v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_S_BFu15s) C1{ Fc:7 Fs Fs:15}



static void Test_BFu7c_S_BFu15s()
{
  {
    init_simple_test("BFu7c_S_BFu15s");
    static STRUCT_IF_C BFu7c_S_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu15s");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_S_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_S_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu15s, BFu7c_S_BFu15s)
//============================================================================


struct  BFu7c_S_BFu16i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_S_BFu16i) C1{ Fc:7 Fs Fi:16}



static void Test_BFu7c_S_BFu16i()
{
  {
    init_simple_test("BFu7c_S_BFu16i");
    static STRUCT_IF_C BFu7c_S_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu16i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_S_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_S_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu16i, BFu7c_S_BFu16i)
//============================================================================


struct  BFu7c_S_BFu16ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_S_BFu16ll) C1{ Fc:7 Fs FL:16}



static void Test_BFu7c_S_BFu16ll()
{
  {
    init_simple_test("BFu7c_S_BFu16ll");
    static STRUCT_IF_C BFu7c_S_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_S_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_S_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu16ll, BFu7c_S_BFu16ll)
//============================================================================


struct  BFu7c_S_BFu16s  {
  unsigned char v1:7;
  short v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_S_BFu16s) C1{ Fc:7 Fs Fs:16}



static void Test_BFu7c_S_BFu16s()
{
  {
    init_simple_test("BFu7c_S_BFu16s");
    static STRUCT_IF_C BFu7c_S_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu16s");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_S_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_S_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu16s, BFu7c_S_BFu16s)
//============================================================================


struct  BFu7c_S_BFu17i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_S_BFu17i) C1{ Fc:7 Fs Fi:17}



static void Test_BFu7c_S_BFu17i()
{
  {
    init_simple_test("BFu7c_S_BFu17i");
    static STRUCT_IF_C BFu7c_S_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu17i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_S_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_S_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu17i, BFu7c_S_BFu17i)
//============================================================================


struct  BFu7c_S_BFu17ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_S_BFu17ll) C1{ Fc:7 Fs FL:17}



static void Test_BFu7c_S_BFu17ll()
{
  {
    init_simple_test("BFu7c_S_BFu17ll");
    static STRUCT_IF_C BFu7c_S_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_S_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_S_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu17ll, BFu7c_S_BFu17ll)
//============================================================================


struct  BFu7c_S_BFu1c  {
  unsigned char v1:7;
  short v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_S_BFu1c) C1{ Fc:7 Fs Fc:1}



static void Test_BFu7c_S_BFu1c()
{
  {
    init_simple_test("BFu7c_S_BFu1c");
    static STRUCT_IF_C BFu7c_S_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu1c");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_S_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu1c, BFu7c_S_BFu1c)
//============================================================================


struct  BFu7c_S_BFu1i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_S_BFu1i) C1{ Fc:7 Fs Fi:1}



static void Test_BFu7c_S_BFu1i()
{
  {
    init_simple_test("BFu7c_S_BFu1i");
    static STRUCT_IF_C BFu7c_S_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu1i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_S_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu1i, BFu7c_S_BFu1i)
//============================================================================


struct  BFu7c_S_BFu1ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_S_BFu1ll) C1{ Fc:7 Fs FL:1}



static void Test_BFu7c_S_BFu1ll()
{
  {
    init_simple_test("BFu7c_S_BFu1ll");
    static STRUCT_IF_C BFu7c_S_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_S_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu1ll, BFu7c_S_BFu1ll)
//============================================================================


struct  BFu7c_S_BFu1s  {
  unsigned char v1:7;
  short v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_S_BFu1s) C1{ Fc:7 Fs Fs:1}



static void Test_BFu7c_S_BFu1s()
{
  {
    init_simple_test("BFu7c_S_BFu1s");
    static STRUCT_IF_C BFu7c_S_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu1s");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_S_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu1s, BFu7c_S_BFu1s)
//============================================================================


struct  BFu7c_S_BFu31i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_S_BFu31i) C1{ Fc:7 Fs Fi:31}



static void Test_BFu7c_S_BFu31i()
{
  {
    init_simple_test("BFu7c_S_BFu31i");
    static STRUCT_IF_C BFu7c_S_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu31i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_S_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_S_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu31i, BFu7c_S_BFu31i)
//============================================================================


struct  BFu7c_S_BFu31ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_S_BFu31ll) C1{ Fc:7 Fs FL:31}



static void Test_BFu7c_S_BFu31ll()
{
  {
    init_simple_test("BFu7c_S_BFu31ll");
    static STRUCT_IF_C BFu7c_S_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_S_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_S_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu31ll, BFu7c_S_BFu31ll)
//============================================================================


struct  BFu7c_S_BFu32i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_S_BFu32i) C1{ Fc:7 Fs Fi:32}



static void Test_BFu7c_S_BFu32i()
{
  {
    init_simple_test("BFu7c_S_BFu32i");
    static STRUCT_IF_C BFu7c_S_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu32i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_S_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_S_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu32i, BFu7c_S_BFu32i)
//============================================================================


struct  BFu7c_S_BFu32ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_S_BFu32ll) C1{ Fc:7 Fs FL:32}



static void Test_BFu7c_S_BFu32ll()
{
  {
    init_simple_test("BFu7c_S_BFu32ll");
    static STRUCT_IF_C BFu7c_S_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_S_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_S_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu32ll, BFu7c_S_BFu32ll)
//============================================================================


struct  BFu7c_S_BFu33  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_S_BFu33) C1{ Fc:7 Fs FL:33}



static void Test_BFu7c_S_BFu33()
{
  {
    init_simple_test("BFu7c_S_BFu33");
    static STRUCT_IF_C BFu7c_S_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_S_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu33");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7c_S_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7c_S_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu33, BFu7c_S_BFu33)
//============================================================================


struct  BFu7c_S_BFu7c  {
  unsigned char v1:7;
  short v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_S_BFu7c) C1{ Fc:7 Fs Fc:7}



static void Test_BFu7c_S_BFu7c()
{
  {
    init_simple_test("BFu7c_S_BFu7c");
    static STRUCT_IF_C BFu7c_S_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu7c");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_S_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu7c, BFu7c_S_BFu7c)
//============================================================================


struct  BFu7c_S_BFu7i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_S_BFu7i) C1{ Fc:7 Fs Fi:7}



static void Test_BFu7c_S_BFu7i()
{
  {
    init_simple_test("BFu7c_S_BFu7i");
    static STRUCT_IF_C BFu7c_S_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu7i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_S_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu7i, BFu7c_S_BFu7i)
//============================================================================


struct  BFu7c_S_BFu7ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_S_BFu7ll) C1{ Fc:7 Fs FL:7}



static void Test_BFu7c_S_BFu7ll()
{
  {
    init_simple_test("BFu7c_S_BFu7ll");
    static STRUCT_IF_C BFu7c_S_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_S_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu7ll, BFu7c_S_BFu7ll)
//============================================================================


struct  BFu7c_S_BFu7s  {
  unsigned char v1:7;
  short v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_S_BFu7s) C1{ Fc:7 Fs Fs:7}



static void Test_BFu7c_S_BFu7s()
{
  {
    init_simple_test("BFu7c_S_BFu7s");
    static STRUCT_IF_C BFu7c_S_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu7s");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_S_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu7s, BFu7c_S_BFu7s)
//============================================================================


struct  BFu7c_S_BFu8c  {
  unsigned char v1:7;
  short v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_S_BFu8c) C1{ Fc:7 Fs Fc:8}



static void Test_BFu7c_S_BFu8c()
{
  {
    init_simple_test("BFu7c_S_BFu8c");
    static STRUCT_IF_C BFu7c_S_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu8c");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_S_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_S_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu8c, BFu7c_S_BFu8c)
//============================================================================


struct  BFu7c_S_BFu8i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_S_BFu8i) C1{ Fc:7 Fs Fi:8}



static void Test_BFu7c_S_BFu8i()
{
  {
    init_simple_test("BFu7c_S_BFu8i");
    static STRUCT_IF_C BFu7c_S_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu8i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_S_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_S_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu8i, BFu7c_S_BFu8i)
//============================================================================


struct  BFu7c_S_BFu8ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_S_BFu8ll) C1{ Fc:7 Fs FL:8}



static void Test_BFu7c_S_BFu8ll()
{
  {
    init_simple_test("BFu7c_S_BFu8ll");
    static STRUCT_IF_C BFu7c_S_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_S_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_S_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu8ll, BFu7c_S_BFu8ll)
//============================================================================


struct  BFu7c_S_BFu8s  {
  unsigned char v1:7;
  short v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_S_BFu8s) C1{ Fc:7 Fs Fs:8}



static void Test_BFu7c_S_BFu8s()
{
  {
    init_simple_test("BFu7c_S_BFu8s");
    static STRUCT_IF_C BFu7c_S_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu8s");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_S_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_S_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu8s, BFu7c_S_BFu8s)
//============================================================================


struct  BFu7c_S_BFu9i  {
  unsigned char v1:7;
  short v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_S_BFu9i) C1{ Fc:7 Fs Fi:9}



static void Test_BFu7c_S_BFu9i()
{
  {
    init_simple_test("BFu7c_S_BFu9i");
    static STRUCT_IF_C BFu7c_S_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu9i");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_S_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_S_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu9i, BFu7c_S_BFu9i)
//============================================================================


struct  BFu7c_S_BFu9ll  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_S_BFu9ll) C1{ Fc:7 Fs FL:9}



static void Test_BFu7c_S_BFu9ll()
{
  {
    init_simple_test("BFu7c_S_BFu9ll");
    static STRUCT_IF_C BFu7c_S_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_S_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_S_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu9ll, BFu7c_S_BFu9ll)
//============================================================================


struct  BFu7c_S_BFu9s  {
  unsigned char v1:7;
  short v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_S_BFu9s) C1{ Fc:7 Fs Fs:9}



static void Test_BFu7c_S_BFu9s()
{
  {
    init_simple_test("BFu7c_S_BFu9s");
    static STRUCT_IF_C BFu7c_S_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_BFu9s");
    check_field_offset(lv, v2, 2, "BFu7c_S_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_S_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_S_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_BFu9s, BFu7c_S_BFu9s)
//============================================================================


struct  BFu7c_S_C  {
  unsigned char v1:7;
  short v2;
  char v3;
};
//SIG(1 BFu7c_S_C) C1{ Fc:7 Fs Fc}



static void Test_BFu7c_S_C()
{
  {
    init_simple_test("BFu7c_S_C");
    static STRUCT_IF_C BFu7c_S_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_C");
    check_field_offset(lv, v2, 2, "BFu7c_S_C.v2");
    check_field_offset(lv, v3, 4, "BFu7c_S_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_C, BFu7c_S_C)
//============================================================================


struct  BFu7c_S_D  {
  unsigned char v1:7;
  short v2;
  double v3;
};
//SIG(1 BFu7c_S_D) C1{ Fc:7 Fs FL}



static void Test_BFu7c_S_D()
{
  {
    init_simple_test("BFu7c_S_D");
    static STRUCT_IF_C BFu7c_S_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_S_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_D");
    check_field_offset(lv, v2, 2, "BFu7c_S_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_S_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_D, BFu7c_S_D)
//============================================================================


struct  BFu7c_S_F  {
  unsigned char v1:7;
  short v2;
  float v3;
};
//SIG(1 BFu7c_S_F) C1{ Fc:7 Fs Fi}



static void Test_BFu7c_S_F()
{
  {
    init_simple_test("BFu7c_S_F");
    static STRUCT_IF_C BFu7c_S_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_F");
    check_field_offset(lv, v2, 2, "BFu7c_S_F.v2");
    check_field_offset(lv, v3, 4, "BFu7c_S_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_F, BFu7c_S_F)
//============================================================================


struct  BFu7c_S_I  {
  unsigned char v1:7;
  short v2;
  int v3;
};
//SIG(1 BFu7c_S_I) C1{ Fc:7 Fs Fi}



static void Test_BFu7c_S_I()
{
  {
    init_simple_test("BFu7c_S_I");
    static STRUCT_IF_C BFu7c_S_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_I");
    check_field_offset(lv, v2, 2, "BFu7c_S_I.v2");
    check_field_offset(lv, v3, 4, "BFu7c_S_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_I, BFu7c_S_I)
//============================================================================


struct  BFu7c_S_Ip  {
  unsigned char v1:7;
  short v2;
  int *v3;
};
//SIG(1 BFu7c_S_Ip) C1{ Fc:7 Fs Fp}



static void Test_BFu7c_S_Ip()
{
  {
    init_simple_test("BFu7c_S_Ip");
    static STRUCT_IF_C BFu7c_S_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_S_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_Ip");
    check_field_offset(lv, v2, 2, "BFu7c_S_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_S_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_Ip, BFu7c_S_Ip)
//============================================================================


struct  BFu7c_S_L  {
  unsigned char v1:7;
  short v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_S_L) C1{ Fc:7 Fs FL}



static void Test_BFu7c_S_L()
{
  {
    init_simple_test("BFu7c_S_L");
    static STRUCT_IF_C BFu7c_S_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_S_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_L");
    check_field_offset(lv, v2, 2, "BFu7c_S_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_S_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_L, BFu7c_S_L)
//============================================================================


struct  BFu7c_S_S  {
  unsigned char v1:7;
  short v2;
  short v3;
};
//SIG(1 BFu7c_S_S) C1{ Fc:7 Fs[2]}



static void Test_BFu7c_S_S()
{
  {
    init_simple_test("BFu7c_S_S");
    static STRUCT_IF_C BFu7c_S_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_S");
    check_field_offset(lv, v2, 2, "BFu7c_S_S.v2");
    check_field_offset(lv, v3, 4, "BFu7c_S_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_S, BFu7c_S_S)
//============================================================================


struct  BFu7c_S_Uc  {
  unsigned char v1:7;
  short v2;
  unsigned char v3;
};
//SIG(1 BFu7c_S_Uc) C1{ Fc:7 Fs Fc}



static void Test_BFu7c_S_Uc()
{
  {
    init_simple_test("BFu7c_S_Uc");
    static STRUCT_IF_C BFu7c_S_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_Uc");
    check_field_offset(lv, v2, 2, "BFu7c_S_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu7c_S_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_Uc, BFu7c_S_Uc)
//============================================================================


struct  BFu7c_S_Ui  {
  unsigned char v1:7;
  short v2;
  unsigned int v3;
};
//SIG(1 BFu7c_S_Ui) C1{ Fc:7 Fs Fi}



static void Test_BFu7c_S_Ui()
{
  {
    init_simple_test("BFu7c_S_Ui");
    static STRUCT_IF_C BFu7c_S_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_S_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_S_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_Ui");
    check_field_offset(lv, v2, 2, "BFu7c_S_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7c_S_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_Ui, BFu7c_S_Ui)
//============================================================================


struct  BFu7c_S_Ul  {
  unsigned char v1:7;
  short v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_S_Ul) C1{ Fc:7 Fs FL}



static void Test_BFu7c_S_Ul()
{
  {
    init_simple_test("BFu7c_S_Ul");
    static STRUCT_IF_C BFu7c_S_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_S_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_Ul");
    check_field_offset(lv, v2, 2, "BFu7c_S_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_S_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_Ul, BFu7c_S_Ul)
//============================================================================


struct  BFu7c_S_Us  {
  unsigned char v1:7;
  short v2;
  unsigned short v3;
};
//SIG(1 BFu7c_S_Us) C1{ Fc:7 Fs[2]}



static void Test_BFu7c_S_Us()
{
  {
    init_simple_test("BFu7c_S_Us");
    static STRUCT_IF_C BFu7c_S_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_S_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_S_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_Us");
    check_field_offset(lv, v2, 2, "BFu7c_S_Us.v2");
    check_field_offset(lv, v3, 4, "BFu7c_S_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_Us, BFu7c_S_Us)
//============================================================================


struct  BFu7c_S_Vp  {
  unsigned char v1:7;
  short v2;
  void *v3;
};
//SIG(1 BFu7c_S_Vp) C1{ Fc:7 Fs Fp}



static void Test_BFu7c_S_Vp()
{
  {
    init_simple_test("BFu7c_S_Vp");
    static STRUCT_IF_C BFu7c_S_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_S_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_S_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_S_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_S_Vp");
    check_field_offset(lv, v2, 2, "BFu7c_S_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_S_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_S_Vp, BFu7c_S_Vp)
//============================================================================


struct  BFu7c_Uc  {
  unsigned char v1:7;
  unsigned char v2;
};
//SIG(1 BFu7c_Uc) C1{ Fc:7 Fc}



static void Test_BFu7c_Uc()
{
  {
    init_simple_test("BFu7c_Uc");
    static STRUCT_IF_C BFu7c_Uc lv;
    check2(sizeof(lv), 2, "sizeof(BFu7c_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc");
    check_field_offset(lv, v2, 1, "BFu7c_Uc.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc, BFu7c_Uc)
//============================================================================


struct  BFu7c_Uc_BFu15i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_Uc_BFu15i) C1{ Fc:7 Fc Fi:15}



static void Test_BFu7c_Uc_BFu15i()
{
  {
    init_simple_test("BFu7c_Uc_BFu15i");
    static STRUCT_IF_C BFu7c_Uc_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu15i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu15i.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_Uc_BFu15i");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_Uc_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu15i, BFu7c_Uc_BFu15i)
//============================================================================


struct  BFu7c_Uc_BFu15ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_Uc_BFu15ll) C1{ Fc:7 Fc FL:15}



static void Test_BFu7c_Uc_BFu15ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu15ll");
    static STRUCT_IF_C BFu7c_Uc_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_Uc_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu15ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu15ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_Uc_BFu15ll");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_Uc_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu15ll, BFu7c_Uc_BFu15ll)
//============================================================================


struct  BFu7c_Uc_BFu15s  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_Uc_BFu15s) C1{ Fc:7 Fc Fs:15}



static void Test_BFu7c_Uc_BFu15s()
{
  {
    init_simple_test("BFu7c_Uc_BFu15s");
    static STRUCT_IF_C BFu7c_Uc_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Uc_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu15s");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu15s.v2");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7c_Uc_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7c_Uc_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu15s, BFu7c_Uc_BFu15s)
//============================================================================


struct  BFu7c_Uc_BFu16i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_Uc_BFu16i) C1{ Fc:7 Fc Fi:16}



static void Test_BFu7c_Uc_BFu16i()
{
  {
    init_simple_test("BFu7c_Uc_BFu16i");
    static STRUCT_IF_C BFu7c_Uc_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu16i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu16i.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_Uc_BFu16i");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_Uc_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu16i, BFu7c_Uc_BFu16i)
//============================================================================


struct  BFu7c_Uc_BFu16ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_Uc_BFu16ll) C1{ Fc:7 Fc FL:16}



static void Test_BFu7c_Uc_BFu16ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu16ll");
    static STRUCT_IF_C BFu7c_Uc_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_Uc_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu16ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu16ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_Uc_BFu16ll");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_Uc_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu16ll, BFu7c_Uc_BFu16ll)
//============================================================================


struct  BFu7c_Uc_BFu16s  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_Uc_BFu16s) C1{ Fc:7 Fc Fs:16}



static void Test_BFu7c_Uc_BFu16s()
{
  {
    init_simple_test("BFu7c_Uc_BFu16s");
    static STRUCT_IF_C BFu7c_Uc_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Uc_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu16s");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu16s.v2");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7c_Uc_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7c_Uc_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu16s, BFu7c_Uc_BFu16s)
//============================================================================


struct  BFu7c_Uc_BFu17i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_Uc_BFu17i) C1{ Fc:7 Fc Fi:17}



static void Test_BFu7c_Uc_BFu17i()
{
  {
    init_simple_test("BFu7c_Uc_BFu17i");
    static STRUCT_IF_C BFu7c_Uc_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu17i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_Uc_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_Uc_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu17i, BFu7c_Uc_BFu17i)
//============================================================================


struct  BFu7c_Uc_BFu17ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_Uc_BFu17ll) C1{ Fc:7 Fc FL:17}



static void Test_BFu7c_Uc_BFu17ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu17ll");
    static STRUCT_IF_C BFu7c_Uc_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu17ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu17ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 17, 1, "BFu7c_Uc_BFu17ll");
    set_bf_and_test(lv, v3, 2, 0, 17, hide_ull(1LL<<16), "BFu7c_Uc_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu17ll, BFu7c_Uc_BFu17ll)
//============================================================================


struct  BFu7c_Uc_BFu1c  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_Uc_BFu1c) C1{ Fc:7 Fc Fc:1}



static void Test_BFu7c_Uc_BFu1c()
{
  {
    init_simple_test("BFu7c_Uc_BFu1c");
    static STRUCT_IF_C BFu7c_Uc_BFu1c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_Uc_BFu1c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_Uc_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu1c");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu1c.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_Uc_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu1c, BFu7c_Uc_BFu1c)
//============================================================================


struct  BFu7c_Uc_BFu1i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_Uc_BFu1i) C1{ Fc:7 Fc Fi:1}



static void Test_BFu7c_Uc_BFu1i()
{
  {
    init_simple_test("BFu7c_Uc_BFu1i");
    static STRUCT_IF_C BFu7c_Uc_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu1i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu1i.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_Uc_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu1i, BFu7c_Uc_BFu1i)
//============================================================================


struct  BFu7c_Uc_BFu1ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_Uc_BFu1ll) C1{ Fc:7 Fc FL:1}



static void Test_BFu7c_Uc_BFu1ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu1ll");
    static STRUCT_IF_C BFu7c_Uc_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_Uc_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu1ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu1ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_Uc_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu1ll, BFu7c_Uc_BFu1ll)
//============================================================================


struct  BFu7c_Uc_BFu1s  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_Uc_BFu1s) C1{ Fc:7 Fc Fs:1}



static void Test_BFu7c_Uc_BFu1s()
{
  {
    init_simple_test("BFu7c_Uc_BFu1s");
    static STRUCT_IF_C BFu7c_Uc_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Uc_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu1s");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu1s.v2");
    set_bf_and_test(lv, v3, 2, 0, 1, 1, "BFu7c_Uc_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu1s, BFu7c_Uc_BFu1s)
//============================================================================


struct  BFu7c_Uc_BFu31i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_Uc_BFu31i) C1{ Fc:7 Fc Fi:31}



static void Test_BFu7c_Uc_BFu31i()
{
  {
    init_simple_test("BFu7c_Uc_BFu31i");
    static STRUCT_IF_C BFu7c_Uc_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu31i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_Uc_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_Uc_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu31i, BFu7c_Uc_BFu31i)
//============================================================================


struct  BFu7c_Uc_BFu31ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_Uc_BFu31ll) C1{ Fc:7 Fc FL:31}



static void Test_BFu7c_Uc_BFu31ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu31ll");
    static STRUCT_IF_C BFu7c_Uc_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu31ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu31ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 31, 1, "BFu7c_Uc_BFu31ll");
    set_bf_and_test(lv, v3, 2, 0, 31, hide_ull(1LL<<30), "BFu7c_Uc_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu31ll, BFu7c_Uc_BFu31ll)
//============================================================================


struct  BFu7c_Uc_BFu32i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_Uc_BFu32i) C1{ Fc:7 Fc Fi:32}



static void Test_BFu7c_Uc_BFu32i()
{
  {
    init_simple_test("BFu7c_Uc_BFu32i");
    static STRUCT_IF_C BFu7c_Uc_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu32i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_Uc_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_Uc_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu32i, BFu7c_Uc_BFu32i)
//============================================================================


struct  BFu7c_Uc_BFu32ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_Uc_BFu32ll) C1{ Fc:7 Fc FL:32}



static void Test_BFu7c_Uc_BFu32ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu32ll");
    static STRUCT_IF_C BFu7c_Uc_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu32ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu32ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 32, 1, "BFu7c_Uc_BFu32ll");
    set_bf_and_test(lv, v3, 2, 0, 32, hide_ull(1LL<<31), "BFu7c_Uc_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu32ll, BFu7c_Uc_BFu32ll)
//============================================================================


struct  BFu7c_Uc_BFu33  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_Uc_BFu33) C1{ Fc:7 Fc FL:33}



static void Test_BFu7c_Uc_BFu33()
{
  {
    init_simple_test("BFu7c_Uc_BFu33");
    static STRUCT_IF_C BFu7c_Uc_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu33");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu33.v2");
    set_bf_and_test(lv, v3, 2, 0, 33, 1, "BFu7c_Uc_BFu33");
    set_bf_and_test(lv, v3, 2, 0, 33, hide_ull(1LL<<32), "BFu7c_Uc_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu33, BFu7c_Uc_BFu33)
//============================================================================


struct  BFu7c_Uc_BFu7c  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_Uc_BFu7c) C1{ Fc:7 Fc Fc:7}



static void Test_BFu7c_Uc_BFu7c()
{
  {
    init_simple_test("BFu7c_Uc_BFu7c");
    static STRUCT_IF_C BFu7c_Uc_BFu7c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_Uc_BFu7c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_Uc_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu7c");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu7c.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_Uc_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu7c, BFu7c_Uc_BFu7c)
//============================================================================


struct  BFu7c_Uc_BFu7i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_Uc_BFu7i) C1{ Fc:7 Fc Fi:7}



static void Test_BFu7c_Uc_BFu7i()
{
  {
    init_simple_test("BFu7c_Uc_BFu7i");
    static STRUCT_IF_C BFu7c_Uc_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu7i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu7i.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_Uc_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu7i, BFu7c_Uc_BFu7i)
//============================================================================


struct  BFu7c_Uc_BFu7ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_Uc_BFu7ll) C1{ Fc:7 Fc FL:7}



static void Test_BFu7c_Uc_BFu7ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu7ll");
    static STRUCT_IF_C BFu7c_Uc_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_Uc_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu7ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu7ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_Uc_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu7ll, BFu7c_Uc_BFu7ll)
//============================================================================


struct  BFu7c_Uc_BFu7s  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_Uc_BFu7s) C1{ Fc:7 Fc Fs:7}



static void Test_BFu7c_Uc_BFu7s()
{
  {
    init_simple_test("BFu7c_Uc_BFu7s");
    static STRUCT_IF_C BFu7c_Uc_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Uc_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu7s");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu7s.v2");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7c_Uc_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu7s, BFu7c_Uc_BFu7s)
//============================================================================


struct  BFu7c_Uc_BFu8c  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_Uc_BFu8c) C1{ Fc:7 Fc Fc:8}



static void Test_BFu7c_Uc_BFu8c()
{
  {
    init_simple_test("BFu7c_Uc_BFu8c");
    static STRUCT_IF_C BFu7c_Uc_BFu8c lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_Uc_BFu8c)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_Uc_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu8c");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu8c.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_Uc_BFu8c");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_Uc_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu8c, BFu7c_Uc_BFu8c)
//============================================================================


struct  BFu7c_Uc_BFu8i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_Uc_BFu8i) C1{ Fc:7 Fc Fi:8}



static void Test_BFu7c_Uc_BFu8i()
{
  {
    init_simple_test("BFu7c_Uc_BFu8i");
    static STRUCT_IF_C BFu7c_Uc_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu8i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu8i.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_Uc_BFu8i");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_Uc_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu8i, BFu7c_Uc_BFu8i)
//============================================================================


struct  BFu7c_Uc_BFu8ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_Uc_BFu8ll) C1{ Fc:7 Fc FL:8}



static void Test_BFu7c_Uc_BFu8ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu8ll");
    static STRUCT_IF_C BFu7c_Uc_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_Uc_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu8ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu8ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_Uc_BFu8ll");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_Uc_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu8ll, BFu7c_Uc_BFu8ll)
//============================================================================


struct  BFu7c_Uc_BFu8s  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_Uc_BFu8s) C1{ Fc:7 Fc Fs:8}



static void Test_BFu7c_Uc_BFu8s()
{
  {
    init_simple_test("BFu7c_Uc_BFu8s");
    static STRUCT_IF_C BFu7c_Uc_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Uc_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu8s");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu8s.v2");
    set_bf_and_test(lv, v3, 2, 0, 8, 1, "BFu7c_Uc_BFu8s");
    set_bf_and_test(lv, v3, 2, 0, 8, hide_ull(1LL<<7), "BFu7c_Uc_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu8s, BFu7c_Uc_BFu8s)
//============================================================================


struct  BFu7c_Uc_BFu9i  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_Uc_BFu9i) C1{ Fc:7 Fc Fi:9}



static void Test_BFu7c_Uc_BFu9i()
{
  {
    init_simple_test("BFu7c_Uc_BFu9i");
    static STRUCT_IF_C BFu7c_Uc_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu9i");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu9i.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_Uc_BFu9i");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_Uc_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu9i, BFu7c_Uc_BFu9i)
//============================================================================


struct  BFu7c_Uc_BFu9ll  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_Uc_BFu9ll) C1{ Fc:7 Fc FL:9}



static void Test_BFu7c_Uc_BFu9ll()
{
  {
    init_simple_test("BFu7c_Uc_BFu9ll");
    static STRUCT_IF_C BFu7c_Uc_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7c_Uc_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu9ll");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu9ll.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_Uc_BFu9ll");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_Uc_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu9ll, BFu7c_Uc_BFu9ll)
//============================================================================


struct  BFu7c_Uc_BFu9s  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_Uc_BFu9s) C1{ Fc:7 Fc Fs:9}



static void Test_BFu7c_Uc_BFu9s()
{
  {
    init_simple_test("BFu7c_Uc_BFu9s");
    static STRUCT_IF_C BFu7c_Uc_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Uc_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_BFu9s");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_BFu9s.v2");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7c_Uc_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7c_Uc_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_BFu9s, BFu7c_Uc_BFu9s)
//============================================================================


struct  BFu7c_Uc_C  {
  unsigned char v1:7;
  unsigned char v2;
  char v3;
};
//SIG(1 BFu7c_Uc_C) C1{ Fc:7 Fc[2]}



static void Test_BFu7c_Uc_C()
{
  {
    init_simple_test("BFu7c_Uc_C");
    static STRUCT_IF_C BFu7c_Uc_C lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_Uc_C)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_Uc_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_C");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_C.v2");
    check_field_offset(lv, v3, 2, "BFu7c_Uc_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_C, BFu7c_Uc_C)
//============================================================================


struct  BFu7c_Uc_D  {
  unsigned char v1:7;
  unsigned char v2;
  double v3;
};
//SIG(1 BFu7c_Uc_D) C1{ Fc:7 Fc FL}



static void Test_BFu7c_Uc_D()
{
  {
    init_simple_test("BFu7c_Uc_D");
    static STRUCT_IF_C BFu7c_Uc_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Uc_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_D");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Uc_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_D, BFu7c_Uc_D)
//============================================================================


struct  BFu7c_Uc_F  {
  unsigned char v1:7;
  unsigned char v2;
  float v3;
};
//SIG(1 BFu7c_Uc_F) C1{ Fc:7 Fc Fi}



static void Test_BFu7c_Uc_F()
{
  {
    init_simple_test("BFu7c_Uc_F");
    static STRUCT_IF_C BFu7c_Uc_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_F");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_F.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Uc_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_F, BFu7c_Uc_F)
//============================================================================


struct  BFu7c_Uc_I  {
  unsigned char v1:7;
  unsigned char v2;
  int v3;
};
//SIG(1 BFu7c_Uc_I) C1{ Fc:7 Fc Fi}



static void Test_BFu7c_Uc_I()
{
  {
    init_simple_test("BFu7c_Uc_I");
    static STRUCT_IF_C BFu7c_Uc_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_I");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_I.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Uc_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_I, BFu7c_Uc_I)
//============================================================================


struct  BFu7c_Uc_Ip  {
  unsigned char v1:7;
  unsigned char v2;
  int *v3;
};
//SIG(1 BFu7c_Uc_Ip) C1{ Fc:7 Fc Fp}



static void Test_BFu7c_Uc_Ip()
{
  {
    init_simple_test("BFu7c_Uc_Ip");
    static STRUCT_IF_C BFu7c_Uc_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Uc_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_Ip");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Uc_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_Ip, BFu7c_Uc_Ip)
//============================================================================


struct  BFu7c_Uc_L  {
  unsigned char v1:7;
  unsigned char v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_Uc_L) C1{ Fc:7 Fc FL}



static void Test_BFu7c_Uc_L()
{
  {
    init_simple_test("BFu7c_Uc_L");
    static STRUCT_IF_C BFu7c_Uc_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Uc_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_L");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Uc_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_L, BFu7c_Uc_L)
//============================================================================


struct  BFu7c_Uc_S  {
  unsigned char v1:7;
  unsigned char v2;
  short v3;
};
//SIG(1 BFu7c_Uc_S) C1{ Fc:7 Fc Fs}



static void Test_BFu7c_Uc_S()
{
  {
    init_simple_test("BFu7c_Uc_S");
    static STRUCT_IF_C BFu7c_Uc_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Uc_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_S");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_S.v2");
    check_field_offset(lv, v3, 2, "BFu7c_Uc_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_S, BFu7c_Uc_S)
//============================================================================


struct  BFu7c_Uc_Uc  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned char v3;
};
//SIG(1 BFu7c_Uc_Uc) C1{ Fc:7 Fc[2]}



static void Test_BFu7c_Uc_Uc()
{
  {
    init_simple_test("BFu7c_Uc_Uc");
    static STRUCT_IF_C BFu7c_Uc_Uc lv;
    check2(sizeof(lv), 3, "sizeof(BFu7c_Uc_Uc)");
    check2(__alignof__(lv), 1, "__alignof__(BFu7c_Uc_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_Uc");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_Uc.v2");
    check_field_offset(lv, v3, 2, "BFu7c_Uc_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_Uc, BFu7c_Uc_Uc)
//============================================================================


struct  BFu7c_Uc_Ui  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned int v3;
};
//SIG(1 BFu7c_Uc_Ui) C1{ Fc:7 Fc Fi}



static void Test_BFu7c_Uc_Ui()
{
  {
    init_simple_test("BFu7c_Uc_Ui");
    static STRUCT_IF_C BFu7c_Uc_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Uc_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Uc_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_Ui");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Uc_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_Ui, BFu7c_Uc_Ui)
//============================================================================


struct  BFu7c_Uc_Ul  {
  unsigned char v1:7;
  unsigned char v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_Uc_Ul) C1{ Fc:7 Fc FL}



static void Test_BFu7c_Uc_Ul()
{
  {
    init_simple_test("BFu7c_Uc_Ul");
    static STRUCT_IF_C BFu7c_Uc_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Uc_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_Ul");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Uc_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_Ul, BFu7c_Uc_Ul)
//============================================================================


struct  BFu7c_Uc_Us  {
  unsigned char v1:7;
  unsigned char v2;
  unsigned short v3;
};
//SIG(1 BFu7c_Uc_Us) C1{ Fc:7 Fc Fs}



static void Test_BFu7c_Uc_Us()
{
  {
    init_simple_test("BFu7c_Uc_Us");
    static STRUCT_IF_C BFu7c_Uc_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Uc_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Uc_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_Us");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_Us.v2");
    check_field_offset(lv, v3, 2, "BFu7c_Uc_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_Us, BFu7c_Uc_Us)
//============================================================================


struct  BFu7c_Uc_Vp  {
  unsigned char v1:7;
  unsigned char v2;
  void *v3;
};
//SIG(1 BFu7c_Uc_Vp) C1{ Fc:7 Fc Fp}



static void Test_BFu7c_Uc_Vp()
{
  {
    init_simple_test("BFu7c_Uc_Vp");
    static STRUCT_IF_C BFu7c_Uc_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Uc_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Uc_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Uc_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Uc_Vp");
    check_field_offset(lv, v2, 1, "BFu7c_Uc_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Uc_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Uc_Vp, BFu7c_Uc_Vp)
//============================================================================


struct  BFu7c_Ui  {
  unsigned char v1:7;
  unsigned int v2;
};
//SIG(1 BFu7c_Ui) C1{ Fc:7 Fi}



static void Test_BFu7c_Ui()
{
  {
    init_simple_test("BFu7c_Ui");
    static STRUCT_IF_C BFu7c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui");
    check_field_offset(lv, v2, 4, "BFu7c_Ui.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui, BFu7c_Ui)
//============================================================================


struct  BFu7c_Ui_BFu15i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_Ui_BFu15i) C1{ Fc:7 Fi Fi:15}



static void Test_BFu7c_Ui_BFu15i()
{
  {
    init_simple_test("BFu7c_Ui_BFu15i");
    static STRUCT_IF_C BFu7c_Ui_BFu15i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu15i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu15i.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_Ui_BFu15i");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_Ui_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu15i, BFu7c_Ui_BFu15i)
//============================================================================


struct  BFu7c_Ui_BFu15ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_Ui_BFu15ll) C1{ Fc:7 Fi FL:15}



static void Test_BFu7c_Ui_BFu15ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu15ll");
    static STRUCT_IF_C BFu7c_Ui_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu15ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu15ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_Ui_BFu15ll");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_Ui_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu15ll, BFu7c_Ui_BFu15ll)
//============================================================================


struct  BFu7c_Ui_BFu15s  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_Ui_BFu15s) C1{ Fc:7 Fi Fs:15}



static void Test_BFu7c_Ui_BFu15s()
{
  {
    init_simple_test("BFu7c_Ui_BFu15s");
    static STRUCT_IF_C BFu7c_Ui_BFu15s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu15s");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu15s.v2");
    set_bf_and_test(lv, v3, 8, 0, 15, 1, "BFu7c_Ui_BFu15s");
    set_bf_and_test(lv, v3, 8, 0, 15, hide_ull(1LL<<14), "BFu7c_Ui_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu15s, BFu7c_Ui_BFu15s)
//============================================================================


struct  BFu7c_Ui_BFu16i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_Ui_BFu16i) C1{ Fc:7 Fi Fi:16}



static void Test_BFu7c_Ui_BFu16i()
{
  {
    init_simple_test("BFu7c_Ui_BFu16i");
    static STRUCT_IF_C BFu7c_Ui_BFu16i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu16i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu16i.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_Ui_BFu16i");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_Ui_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu16i, BFu7c_Ui_BFu16i)
//============================================================================


struct  BFu7c_Ui_BFu16ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_Ui_BFu16ll) C1{ Fc:7 Fi FL:16}



static void Test_BFu7c_Ui_BFu16ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu16ll");
    static STRUCT_IF_C BFu7c_Ui_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu16ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu16ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_Ui_BFu16ll");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_Ui_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu16ll, BFu7c_Ui_BFu16ll)
//============================================================================


struct  BFu7c_Ui_BFu16s  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_Ui_BFu16s) C1{ Fc:7 Fi Fs:16}



static void Test_BFu7c_Ui_BFu16s()
{
  {
    init_simple_test("BFu7c_Ui_BFu16s");
    static STRUCT_IF_C BFu7c_Ui_BFu16s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu16s");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu16s.v2");
    set_bf_and_test(lv, v3, 8, 0, 16, 1, "BFu7c_Ui_BFu16s");
    set_bf_and_test(lv, v3, 8, 0, 16, hide_ull(1LL<<15), "BFu7c_Ui_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu16s, BFu7c_Ui_BFu16s)
//============================================================================


struct  BFu7c_Ui_BFu17i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_Ui_BFu17i) C1{ Fc:7 Fi Fi:17}



static void Test_BFu7c_Ui_BFu17i()
{
  {
    init_simple_test("BFu7c_Ui_BFu17i");
    static STRUCT_IF_C BFu7c_Ui_BFu17i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu17i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu17i.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_Ui_BFu17i");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_Ui_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu17i, BFu7c_Ui_BFu17i)
//============================================================================


struct  BFu7c_Ui_BFu17ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_Ui_BFu17ll) C1{ Fc:7 Fi FL:17}



static void Test_BFu7c_Ui_BFu17ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu17ll");
    static STRUCT_IF_C BFu7c_Ui_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu17ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu17ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 17, 1, "BFu7c_Ui_BFu17ll");
    set_bf_and_test(lv, v3, 8, 0, 17, hide_ull(1LL<<16), "BFu7c_Ui_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu17ll, BFu7c_Ui_BFu17ll)
//============================================================================


struct  BFu7c_Ui_BFu1c  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_Ui_BFu1c) C1{ Fc:7 Fi Fc:1}



static void Test_BFu7c_Ui_BFu1c()
{
  {
    init_simple_test("BFu7c_Ui_BFu1c");
    static STRUCT_IF_C BFu7c_Ui_BFu1c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu1c");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu1c.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_Ui_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu1c, BFu7c_Ui_BFu1c)
//============================================================================


struct  BFu7c_Ui_BFu1i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_Ui_BFu1i) C1{ Fc:7 Fi Fi:1}



static void Test_BFu7c_Ui_BFu1i()
{
  {
    init_simple_test("BFu7c_Ui_BFu1i");
    static STRUCT_IF_C BFu7c_Ui_BFu1i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu1i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu1i.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_Ui_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu1i, BFu7c_Ui_BFu1i)
//============================================================================


struct  BFu7c_Ui_BFu1ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_Ui_BFu1ll) C1{ Fc:7 Fi FL:1}



static void Test_BFu7c_Ui_BFu1ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu1ll");
    static STRUCT_IF_C BFu7c_Ui_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu1ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu1ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_Ui_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu1ll, BFu7c_Ui_BFu1ll)
//============================================================================


struct  BFu7c_Ui_BFu1s  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_Ui_BFu1s) C1{ Fc:7 Fi Fs:1}



static void Test_BFu7c_Ui_BFu1s()
{
  {
    init_simple_test("BFu7c_Ui_BFu1s");
    static STRUCT_IF_C BFu7c_Ui_BFu1s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu1s");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu1s.v2");
    set_bf_and_test(lv, v3, 8, 0, 1, 1, "BFu7c_Ui_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu1s, BFu7c_Ui_BFu1s)
//============================================================================


struct  BFu7c_Ui_BFu31i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_Ui_BFu31i) C1{ Fc:7 Fi Fi:31}



static void Test_BFu7c_Ui_BFu31i()
{
  {
    init_simple_test("BFu7c_Ui_BFu31i");
    static STRUCT_IF_C BFu7c_Ui_BFu31i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu31i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu31i.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_Ui_BFu31i");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_Ui_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu31i, BFu7c_Ui_BFu31i)
//============================================================================


struct  BFu7c_Ui_BFu31ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_Ui_BFu31ll) C1{ Fc:7 Fi FL:31}



static void Test_BFu7c_Ui_BFu31ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu31ll");
    static STRUCT_IF_C BFu7c_Ui_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu31ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu31ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 31, 1, "BFu7c_Ui_BFu31ll");
    set_bf_and_test(lv, v3, 8, 0, 31, hide_ull(1LL<<30), "BFu7c_Ui_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu31ll, BFu7c_Ui_BFu31ll)
//============================================================================


struct  BFu7c_Ui_BFu32i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_Ui_BFu32i) C1{ Fc:7 Fi Fi:32}



static void Test_BFu7c_Ui_BFu32i()
{
  {
    init_simple_test("BFu7c_Ui_BFu32i");
    static STRUCT_IF_C BFu7c_Ui_BFu32i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu32i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu32i.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_Ui_BFu32i");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_Ui_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu32i, BFu7c_Ui_BFu32i)
//============================================================================


struct  BFu7c_Ui_BFu32ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_Ui_BFu32ll) C1{ Fc:7 Fi FL:32}



static void Test_BFu7c_Ui_BFu32ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu32ll");
    static STRUCT_IF_C BFu7c_Ui_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu32ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu32ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 32, 1, "BFu7c_Ui_BFu32ll");
    set_bf_and_test(lv, v3, 8, 0, 32, hide_ull(1LL<<31), "BFu7c_Ui_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu32ll, BFu7c_Ui_BFu32ll)
//============================================================================


struct  BFu7c_Ui_BFu33  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_Ui_BFu33) C1{ Fc:7 Fi FL:33}



static void Test_BFu7c_Ui_BFu33()
{
  {
    init_simple_test("BFu7c_Ui_BFu33");
    static STRUCT_IF_C BFu7c_Ui_BFu33 lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_Ui_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu33");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu33.v2");
    set_bf_and_test(lv, v3, 8, 0, 33, 1, "BFu7c_Ui_BFu33");
    set_bf_and_test(lv, v3, 8, 0, 33, hide_ull(1LL<<32), "BFu7c_Ui_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu33, BFu7c_Ui_BFu33)
//============================================================================


struct  BFu7c_Ui_BFu7c  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_Ui_BFu7c) C1{ Fc:7 Fi Fc:7}



static void Test_BFu7c_Ui_BFu7c()
{
  {
    init_simple_test("BFu7c_Ui_BFu7c");
    static STRUCT_IF_C BFu7c_Ui_BFu7c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu7c");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu7c.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_Ui_BFu7c");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu7c, BFu7c_Ui_BFu7c)
//============================================================================


struct  BFu7c_Ui_BFu7i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_Ui_BFu7i) C1{ Fc:7 Fi Fi:7}



static void Test_BFu7c_Ui_BFu7i()
{
  {
    init_simple_test("BFu7c_Ui_BFu7i");
    static STRUCT_IF_C BFu7c_Ui_BFu7i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu7i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu7i.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_Ui_BFu7i");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu7i, BFu7c_Ui_BFu7i)
//============================================================================


struct  BFu7c_Ui_BFu7ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_Ui_BFu7ll) C1{ Fc:7 Fi FL:7}



static void Test_BFu7c_Ui_BFu7ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu7ll");
    static STRUCT_IF_C BFu7c_Ui_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu7ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu7ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_Ui_BFu7ll");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu7ll, BFu7c_Ui_BFu7ll)
//============================================================================


struct  BFu7c_Ui_BFu7s  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_Ui_BFu7s) C1{ Fc:7 Fi Fs:7}



static void Test_BFu7c_Ui_BFu7s()
{
  {
    init_simple_test("BFu7c_Ui_BFu7s");
    static STRUCT_IF_C BFu7c_Ui_BFu7s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu7s");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu7s.v2");
    set_bf_and_test(lv, v3, 8, 0, 7, 1, "BFu7c_Ui_BFu7s");
    set_bf_and_test(lv, v3, 8, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu7s, BFu7c_Ui_BFu7s)
//============================================================================


struct  BFu7c_Ui_BFu8c  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_Ui_BFu8c) C1{ Fc:7 Fi Fc:8}



static void Test_BFu7c_Ui_BFu8c()
{
  {
    init_simple_test("BFu7c_Ui_BFu8c");
    static STRUCT_IF_C BFu7c_Ui_BFu8c lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu8c");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu8c.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_Ui_BFu8c");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_Ui_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu8c, BFu7c_Ui_BFu8c)
//============================================================================


struct  BFu7c_Ui_BFu8i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_Ui_BFu8i) C1{ Fc:7 Fi Fi:8}



static void Test_BFu7c_Ui_BFu8i()
{
  {
    init_simple_test("BFu7c_Ui_BFu8i");
    static STRUCT_IF_C BFu7c_Ui_BFu8i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu8i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu8i.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_Ui_BFu8i");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_Ui_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu8i, BFu7c_Ui_BFu8i)
//============================================================================


struct  BFu7c_Ui_BFu8ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_Ui_BFu8ll) C1{ Fc:7 Fi FL:8}



static void Test_BFu7c_Ui_BFu8ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu8ll");
    static STRUCT_IF_C BFu7c_Ui_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu8ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu8ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_Ui_BFu8ll");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_Ui_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu8ll, BFu7c_Ui_BFu8ll)
//============================================================================


struct  BFu7c_Ui_BFu8s  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_Ui_BFu8s) C1{ Fc:7 Fi Fs:8}



static void Test_BFu7c_Ui_BFu8s()
{
  {
    init_simple_test("BFu7c_Ui_BFu8s");
    static STRUCT_IF_C BFu7c_Ui_BFu8s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu8s");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu8s.v2");
    set_bf_and_test(lv, v3, 8, 0, 8, 1, "BFu7c_Ui_BFu8s");
    set_bf_and_test(lv, v3, 8, 0, 8, hide_ull(1LL<<7), "BFu7c_Ui_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu8s, BFu7c_Ui_BFu8s)
//============================================================================


struct  BFu7c_Ui_BFu9i  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_Ui_BFu9i) C1{ Fc:7 Fi Fi:9}



static void Test_BFu7c_Ui_BFu9i()
{
  {
    init_simple_test("BFu7c_Ui_BFu9i");
    static STRUCT_IF_C BFu7c_Ui_BFu9i lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu9i");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu9i.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_Ui_BFu9i");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_Ui_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu9i, BFu7c_Ui_BFu9i)
//============================================================================


struct  BFu7c_Ui_BFu9ll  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_Ui_BFu9ll) C1{ Fc:7 Fi FL:9}



static void Test_BFu7c_Ui_BFu9ll()
{
  {
    init_simple_test("BFu7c_Ui_BFu9ll");
    static STRUCT_IF_C BFu7c_Ui_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu9ll");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu9ll.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_Ui_BFu9ll");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_Ui_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu9ll, BFu7c_Ui_BFu9ll)
//============================================================================


struct  BFu7c_Ui_BFu9s  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_Ui_BFu9s) C1{ Fc:7 Fi Fs:9}



static void Test_BFu7c_Ui_BFu9s()
{
  {
    init_simple_test("BFu7c_Ui_BFu9s");
    static STRUCT_IF_C BFu7c_Ui_BFu9s lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_BFu9s");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_BFu9s.v2");
    set_bf_and_test(lv, v3, 8, 0, 9, 1, "BFu7c_Ui_BFu9s");
    set_bf_and_test(lv, v3, 8, 0, 9, hide_ull(1LL<<8), "BFu7c_Ui_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_BFu9s, BFu7c_Ui_BFu9s)
//============================================================================


struct  BFu7c_Ui_C  {
  unsigned char v1:7;
  unsigned int v2;
  char v3;
};
//SIG(1 BFu7c_Ui_C) C1{ Fc:7 Fi Fc}



static void Test_BFu7c_Ui_C()
{
  {
    init_simple_test("BFu7c_Ui_C");
    static STRUCT_IF_C BFu7c_Ui_C lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_C");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_C.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_C, BFu7c_Ui_C)
//============================================================================


struct  BFu7c_Ui_D  {
  unsigned char v1:7;
  unsigned int v2;
  double v3;
};
//SIG(1 BFu7c_Ui_D) C1{ Fc:7 Fi FL}



static void Test_BFu7c_Ui_D()
{
  {
    init_simple_test("BFu7c_Ui_D");
    static STRUCT_IF_C BFu7c_Ui_D lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_Ui_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_D");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_D.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_D, BFu7c_Ui_D)
//============================================================================


struct  BFu7c_Ui_F  {
  unsigned char v1:7;
  unsigned int v2;
  float v3;
};
//SIG(1 BFu7c_Ui_F) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_Ui_F()
{
  {
    init_simple_test("BFu7c_Ui_F");
    static STRUCT_IF_C BFu7c_Ui_F lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_F");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_F.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_F, BFu7c_Ui_F)
//============================================================================


struct  BFu7c_Ui_I  {
  unsigned char v1:7;
  unsigned int v2;
  int v3;
};
//SIG(1 BFu7c_Ui_I) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_Ui_I()
{
  {
    init_simple_test("BFu7c_Ui_I");
    static STRUCT_IF_C BFu7c_Ui_I lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_I");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_I.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_I, BFu7c_Ui_I)
//============================================================================


struct  BFu7c_Ui_Ip  {
  unsigned char v1:7;
  unsigned int v2;
  int *v3;
};
//SIG(1 BFu7c_Ui_Ip) C1{ Fc:7 Fi Fp}



static void Test_BFu7c_Ui_Ip()
{
  {
    init_simple_test("BFu7c_Ui_Ip");
    static STRUCT_IF_C BFu7c_Ui_Ip lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_Ip");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_Ip.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_Ip, BFu7c_Ui_Ip)
//============================================================================


struct  BFu7c_Ui_L  {
  unsigned char v1:7;
  unsigned int v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_Ui_L) C1{ Fc:7 Fi FL}



static void Test_BFu7c_Ui_L()
{
  {
    init_simple_test("BFu7c_Ui_L");
    static STRUCT_IF_C BFu7c_Ui_L lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_Ui_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_L");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_L.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_L, BFu7c_Ui_L)
//============================================================================


struct  BFu7c_Ui_S  {
  unsigned char v1:7;
  unsigned int v2;
  short v3;
};
//SIG(1 BFu7c_Ui_S) C1{ Fc:7 Fi Fs}



static void Test_BFu7c_Ui_S()
{
  {
    init_simple_test("BFu7c_Ui_S");
    static STRUCT_IF_C BFu7c_Ui_S lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_S");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_S.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_S, BFu7c_Ui_S)
//============================================================================


struct  BFu7c_Ui_Uc  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned char v3;
};
//SIG(1 BFu7c_Ui_Uc) C1{ Fc:7 Fi Fc}



static void Test_BFu7c_Ui_Uc()
{
  {
    init_simple_test("BFu7c_Ui_Uc");
    static STRUCT_IF_C BFu7c_Ui_Uc lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_Uc");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_Uc.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_Uc, BFu7c_Ui_Uc)
//============================================================================


struct  BFu7c_Ui_Ui  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned int v3;
};
//SIG(1 BFu7c_Ui_Ui) C1{ Fc:7 Fi[2]}



static void Test_BFu7c_Ui_Ui()
{
  {
    init_simple_test("BFu7c_Ui_Ui");
    static STRUCT_IF_C BFu7c_Ui_Ui lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_Ui");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_Ui.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_Ui, BFu7c_Ui_Ui)
//============================================================================


struct  BFu7c_Ui_Ul  {
  unsigned char v1:7;
  unsigned int v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_Ui_Ul) C1{ Fc:7 Fi FL}



static void Test_BFu7c_Ui_Ul()
{
  {
    init_simple_test("BFu7c_Ui_Ul");
    static STRUCT_IF_C BFu7c_Ui_Ul lv;
    check2(sizeof(lv), 16, "sizeof(BFu7c_Ui_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_Ul");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_Ul.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_Ul, BFu7c_Ui_Ul)
//============================================================================


struct  BFu7c_Ui_Us  {
  unsigned char v1:7;
  unsigned int v2;
  unsigned short v3;
};
//SIG(1 BFu7c_Ui_Us) C1{ Fc:7 Fi Fs}



static void Test_BFu7c_Ui_Us()
{
  {
    init_simple_test("BFu7c_Ui_Us");
    static STRUCT_IF_C BFu7c_Ui_Us lv;
    check2(sizeof(lv), 12, "sizeof(BFu7c_Ui_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Ui_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_Us");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_Us.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_Us, BFu7c_Ui_Us)
//============================================================================


struct  BFu7c_Ui_Vp  {
  unsigned char v1:7;
  unsigned int v2;
  void *v3;
};
//SIG(1 BFu7c_Ui_Vp) C1{ Fc:7 Fi Fp}



static void Test_BFu7c_Ui_Vp()
{
  {
    init_simple_test("BFu7c_Ui_Vp");
    static STRUCT_IF_C BFu7c_Ui_Vp lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ui_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ui_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ui_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ui_Vp");
    check_field_offset(lv, v2, 4, "BFu7c_Ui_Vp.v2");
    check_field_offset(lv, v3, 8, "BFu7c_Ui_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ui_Vp, BFu7c_Ui_Vp)
//============================================================================


struct  BFu7c_Ul  {
  unsigned char v1:7;
  __tsu64 v2;
};
//SIG(1 BFu7c_Ul) C1{ Fc:7 FL}



static void Test_BFu7c_Ul()
{
  {
    init_simple_test("BFu7c_Ul");
    static STRUCT_IF_C BFu7c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul, BFu7c_Ul)
//============================================================================


struct  BFu7c_Ul_BFu15i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_Ul_BFu15i) C1{ Fc:7 FL Fi:15}



static void Test_BFu7c_Ul_BFu15i()
{
  {
    init_simple_test("BFu7c_Ul_BFu15i");
    static STRUCT_IF_C BFu7c_Ul_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_Ul_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_Ul_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu15i, BFu7c_Ul_BFu15i)
//============================================================================


struct  BFu7c_Ul_BFu15ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_Ul_BFu15ll) C1{ Fc:7 FL FL:15}



static void Test_BFu7c_Ul_BFu15ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu15ll");
    static STRUCT_IF_C BFu7c_Ul_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_Ul_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_Ul_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu15ll, BFu7c_Ul_BFu15ll)
//============================================================================


struct  BFu7c_Ul_BFu15s  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_Ul_BFu15s) C1{ Fc:7 FL Fs:15}



static void Test_BFu7c_Ul_BFu15s()
{
  {
    init_simple_test("BFu7c_Ul_BFu15s");
    static STRUCT_IF_C BFu7c_Ul_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, 1, "BFu7c_Ul_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 15, hide_ull(1LL<<14), "BFu7c_Ul_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu15s, BFu7c_Ul_BFu15s)
//============================================================================


struct  BFu7c_Ul_BFu16i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_Ul_BFu16i) C1{ Fc:7 FL Fi:16}



static void Test_BFu7c_Ul_BFu16i()
{
  {
    init_simple_test("BFu7c_Ul_BFu16i");
    static STRUCT_IF_C BFu7c_Ul_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_Ul_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_Ul_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu16i, BFu7c_Ul_BFu16i)
//============================================================================


struct  BFu7c_Ul_BFu16ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_Ul_BFu16ll) C1{ Fc:7 FL FL:16}



static void Test_BFu7c_Ul_BFu16ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu16ll");
    static STRUCT_IF_C BFu7c_Ul_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_Ul_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_Ul_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu16ll, BFu7c_Ul_BFu16ll)
//============================================================================


struct  BFu7c_Ul_BFu16s  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_Ul_BFu16s) C1{ Fc:7 FL Fs:16}



static void Test_BFu7c_Ul_BFu16s()
{
  {
    init_simple_test("BFu7c_Ul_BFu16s");
    static STRUCT_IF_C BFu7c_Ul_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, 1, "BFu7c_Ul_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 16, hide_ull(1LL<<15), "BFu7c_Ul_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu16s, BFu7c_Ul_BFu16s)
//============================================================================


struct  BFu7c_Ul_BFu17i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_Ul_BFu17i) C1{ Fc:7 FL Fi:17}



static void Test_BFu7c_Ul_BFu17i()
{
  {
    init_simple_test("BFu7c_Ul_BFu17i");
    static STRUCT_IF_C BFu7c_Ul_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7c_Ul_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7c_Ul_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu17i, BFu7c_Ul_BFu17i)
//============================================================================


struct  BFu7c_Ul_BFu17ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_Ul_BFu17ll) C1{ Fc:7 FL FL:17}



static void Test_BFu7c_Ul_BFu17ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu17ll");
    static STRUCT_IF_C BFu7c_Ul_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, 1, "BFu7c_Ul_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 17, hide_ull(1LL<<16), "BFu7c_Ul_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu17ll, BFu7c_Ul_BFu17ll)
//============================================================================


struct  BFu7c_Ul_BFu1c  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_Ul_BFu1c) C1{ Fc:7 FL Fc:1}



static void Test_BFu7c_Ul_BFu1c()
{
  {
    init_simple_test("BFu7c_Ul_BFu1c");
    static STRUCT_IF_C BFu7c_Ul_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_Ul_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu1c, BFu7c_Ul_BFu1c)
//============================================================================


struct  BFu7c_Ul_BFu1i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_Ul_BFu1i) C1{ Fc:7 FL Fi:1}



static void Test_BFu7c_Ul_BFu1i()
{
  {
    init_simple_test("BFu7c_Ul_BFu1i");
    static STRUCT_IF_C BFu7c_Ul_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_Ul_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu1i, BFu7c_Ul_BFu1i)
//============================================================================


struct  BFu7c_Ul_BFu1ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_Ul_BFu1ll) C1{ Fc:7 FL FL:1}



static void Test_BFu7c_Ul_BFu1ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu1ll");
    static STRUCT_IF_C BFu7c_Ul_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_Ul_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu1ll, BFu7c_Ul_BFu1ll)
//============================================================================


struct  BFu7c_Ul_BFu1s  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_Ul_BFu1s) C1{ Fc:7 FL Fs:1}



static void Test_BFu7c_Ul_BFu1s()
{
  {
    init_simple_test("BFu7c_Ul_BFu1s");
    static STRUCT_IF_C BFu7c_Ul_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 1, 1, "BFu7c_Ul_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu1s, BFu7c_Ul_BFu1s)
//============================================================================


struct  BFu7c_Ul_BFu31i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_Ul_BFu31i) C1{ Fc:7 FL Fi:31}



static void Test_BFu7c_Ul_BFu31i()
{
  {
    init_simple_test("BFu7c_Ul_BFu31i");
    static STRUCT_IF_C BFu7c_Ul_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7c_Ul_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7c_Ul_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu31i, BFu7c_Ul_BFu31i)
//============================================================================


struct  BFu7c_Ul_BFu31ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_Ul_BFu31ll) C1{ Fc:7 FL FL:31}



static void Test_BFu7c_Ul_BFu31ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu31ll");
    static STRUCT_IF_C BFu7c_Ul_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, 1, "BFu7c_Ul_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 31, hide_ull(1LL<<30), "BFu7c_Ul_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu31ll, BFu7c_Ul_BFu31ll)
//============================================================================


struct  BFu7c_Ul_BFu32i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_Ul_BFu32i) C1{ Fc:7 FL Fi:32}



static void Test_BFu7c_Ul_BFu32i()
{
  {
    init_simple_test("BFu7c_Ul_BFu32i");
    static STRUCT_IF_C BFu7c_Ul_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7c_Ul_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7c_Ul_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu32i, BFu7c_Ul_BFu32i)
//============================================================================


struct  BFu7c_Ul_BFu32ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_Ul_BFu32ll) C1{ Fc:7 FL FL:32}



static void Test_BFu7c_Ul_BFu32ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu32ll");
    static STRUCT_IF_C BFu7c_Ul_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, 1, "BFu7c_Ul_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 32, hide_ull(1LL<<31), "BFu7c_Ul_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu32ll, BFu7c_Ul_BFu32ll)
//============================================================================


struct  BFu7c_Ul_BFu33  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_Ul_BFu33) C1{ Fc:7 FL FL:33}



static void Test_BFu7c_Ul_BFu33()
{
  {
    init_simple_test("BFu7c_Ul_BFu33");
    static STRUCT_IF_C BFu7c_Ul_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_Ul_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, 1, "BFu7c_Ul_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 33, hide_ull(1LL<<32), "BFu7c_Ul_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu33, BFu7c_Ul_BFu33)
//============================================================================


struct  BFu7c_Ul_BFu7c  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_Ul_BFu7c) C1{ Fc:7 FL Fc:7}



static void Test_BFu7c_Ul_BFu7c()
{
  {
    init_simple_test("BFu7c_Ul_BFu7c");
    static STRUCT_IF_C BFu7c_Ul_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_Ul_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu7c, BFu7c_Ul_BFu7c)
//============================================================================


struct  BFu7c_Ul_BFu7i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_Ul_BFu7i) C1{ Fc:7 FL Fi:7}



static void Test_BFu7c_Ul_BFu7i()
{
  {
    init_simple_test("BFu7c_Ul_BFu7i");
    static STRUCT_IF_C BFu7c_Ul_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_Ul_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu7i, BFu7c_Ul_BFu7i)
//============================================================================


struct  BFu7c_Ul_BFu7ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_Ul_BFu7ll) C1{ Fc:7 FL FL:7}



static void Test_BFu7c_Ul_BFu7ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu7ll");
    static STRUCT_IF_C BFu7c_Ul_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_Ul_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu7ll, BFu7c_Ul_BFu7ll)
//============================================================================


struct  BFu7c_Ul_BFu7s  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_Ul_BFu7s) C1{ Fc:7 FL Fs:7}



static void Test_BFu7c_Ul_BFu7s()
{
  {
    init_simple_test("BFu7c_Ul_BFu7s");
    static STRUCT_IF_C BFu7c_Ul_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, 1, "BFu7c_Ul_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu7s, BFu7c_Ul_BFu7s)
//============================================================================


struct  BFu7c_Ul_BFu8c  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_Ul_BFu8c) C1{ Fc:7 FL Fc:8}



static void Test_BFu7c_Ul_BFu8c()
{
  {
    init_simple_test("BFu7c_Ul_BFu8c");
    static STRUCT_IF_C BFu7c_Ul_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_Ul_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_Ul_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu8c, BFu7c_Ul_BFu8c)
//============================================================================


struct  BFu7c_Ul_BFu8i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_Ul_BFu8i) C1{ Fc:7 FL Fi:8}



static void Test_BFu7c_Ul_BFu8i()
{
  {
    init_simple_test("BFu7c_Ul_BFu8i");
    static STRUCT_IF_C BFu7c_Ul_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_Ul_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_Ul_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu8i, BFu7c_Ul_BFu8i)
//============================================================================


struct  BFu7c_Ul_BFu8ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_Ul_BFu8ll) C1{ Fc:7 FL FL:8}



static void Test_BFu7c_Ul_BFu8ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu8ll");
    static STRUCT_IF_C BFu7c_Ul_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_Ul_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_Ul_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu8ll, BFu7c_Ul_BFu8ll)
//============================================================================


struct  BFu7c_Ul_BFu8s  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_Ul_BFu8s) C1{ Fc:7 FL Fs:8}



static void Test_BFu7c_Ul_BFu8s()
{
  {
    init_simple_test("BFu7c_Ul_BFu8s");
    static STRUCT_IF_C BFu7c_Ul_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, 1, "BFu7c_Ul_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 8, hide_ull(1LL<<7), "BFu7c_Ul_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu8s, BFu7c_Ul_BFu8s)
//============================================================================


struct  BFu7c_Ul_BFu9i  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_Ul_BFu9i) C1{ Fc:7 FL Fi:9}



static void Test_BFu7c_Ul_BFu9i()
{
  {
    init_simple_test("BFu7c_Ul_BFu9i");
    static STRUCT_IF_C BFu7c_Ul_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_Ul_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_Ul_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu9i, BFu7c_Ul_BFu9i)
//============================================================================


struct  BFu7c_Ul_BFu9ll  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_Ul_BFu9ll) C1{ Fc:7 FL FL:9}



static void Test_BFu7c_Ul_BFu9ll()
{
  {
    init_simple_test("BFu7c_Ul_BFu9ll");
    static STRUCT_IF_C BFu7c_Ul_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_Ul_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_Ul_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu9ll, BFu7c_Ul_BFu9ll)
//============================================================================


struct  BFu7c_Ul_BFu9s  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_Ul_BFu9s) C1{ Fc:7 FL Fs:9}



static void Test_BFu7c_Ul_BFu9s()
{
  {
    init_simple_test("BFu7c_Ul_BFu9s");
    static STRUCT_IF_C BFu7c_Ul_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, 1, "BFu7c_Ul_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,12), 0, 9, hide_ull(1LL<<8), "BFu7c_Ul_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_BFu9s, BFu7c_Ul_BFu9s)
//============================================================================


struct  BFu7c_Ul_C  {
  unsigned char v1:7;
  __tsu64 v2;
  char v3;
};
//SIG(1 BFu7c_Ul_C) C1{ Fc:7 FL Fc}



static void Test_BFu7c_Ul_C()
{
  {
    init_simple_test("BFu7c_Ul_C");
    static STRUCT_IF_C BFu7c_Ul_C lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_C, BFu7c_Ul_C)
//============================================================================


struct  BFu7c_Ul_D  {
  unsigned char v1:7;
  __tsu64 v2;
  double v3;
};
//SIG(1 BFu7c_Ul_D) C1{ Fc:7 FL[2]}



static void Test_BFu7c_Ul_D()
{
  {
    init_simple_test("BFu7c_Ul_D");
    static STRUCT_IF_C BFu7c_Ul_D lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_Ul_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_D, BFu7c_Ul_D)
//============================================================================


struct  BFu7c_Ul_F  {
  unsigned char v1:7;
  __tsu64 v2;
  float v3;
};
//SIG(1 BFu7c_Ul_F) C1{ Fc:7 FL Fi}



static void Test_BFu7c_Ul_F()
{
  {
    init_simple_test("BFu7c_Ul_F");
    static STRUCT_IF_C BFu7c_Ul_F lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_F, BFu7c_Ul_F)
//============================================================================


struct  BFu7c_Ul_I  {
  unsigned char v1:7;
  __tsu64 v2;
  int v3;
};
//SIG(1 BFu7c_Ul_I) C1{ Fc:7 FL Fi}



static void Test_BFu7c_Ul_I()
{
  {
    init_simple_test("BFu7c_Ul_I");
    static STRUCT_IF_C BFu7c_Ul_I lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_I, BFu7c_Ul_I)
//============================================================================


struct  BFu7c_Ul_Ip  {
  unsigned char v1:7;
  __tsu64 v2;
  int *v3;
};
//SIG(1 BFu7c_Ul_Ip) C1{ Fc:7 FL Fp}



static void Test_BFu7c_Ul_Ip()
{
  {
    init_simple_test("BFu7c_Ul_Ip");
    static STRUCT_IF_C BFu7c_Ul_Ip lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_Ip, BFu7c_Ul_Ip)
//============================================================================


struct  BFu7c_Ul_L  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_Ul_L) C1{ Fc:7 FL[2]}



static void Test_BFu7c_Ul_L()
{
  {
    init_simple_test("BFu7c_Ul_L");
    static STRUCT_IF_C BFu7c_Ul_L lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_Ul_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_L, BFu7c_Ul_L)
//============================================================================


struct  BFu7c_Ul_S  {
  unsigned char v1:7;
  __tsu64 v2;
  short v3;
};
//SIG(1 BFu7c_Ul_S) C1{ Fc:7 FL Fs}



static void Test_BFu7c_Ul_S()
{
  {
    init_simple_test("BFu7c_Ul_S");
    static STRUCT_IF_C BFu7c_Ul_S lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_S, BFu7c_Ul_S)
//============================================================================


struct  BFu7c_Ul_Uc  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned char v3;
};
//SIG(1 BFu7c_Ul_Uc) C1{ Fc:7 FL Fc}



static void Test_BFu7c_Ul_Uc()
{
  {
    init_simple_test("BFu7c_Ul_Uc");
    static STRUCT_IF_C BFu7c_Ul_Uc lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_Uc, BFu7c_Ul_Uc)
//============================================================================


struct  BFu7c_Ul_Ui  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned int v3;
};
//SIG(1 BFu7c_Ul_Ui) C1{ Fc:7 FL Fi}



static void Test_BFu7c_Ul_Ui()
{
  {
    init_simple_test("BFu7c_Ul_Ui");
    static STRUCT_IF_C BFu7c_Ul_Ui lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_Ui, BFu7c_Ul_Ui)
//============================================================================


struct  BFu7c_Ul_Ul  {
  unsigned char v1:7;
  __tsu64 v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_Ul_Ul) C1{ Fc:7 FL[2]}



static void Test_BFu7c_Ul_Ul()
{
  {
    init_simple_test("BFu7c_Ul_Ul");
    static STRUCT_IF_C BFu7c_Ul_Ul lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(BFu7c_Ul_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_Ul, BFu7c_Ul_Ul)
//============================================================================


struct  BFu7c_Ul_Us  {
  unsigned char v1:7;
  __tsu64 v2;
  unsigned short v3;
};
//SIG(1 BFu7c_Ul_Us) C1{ Fc:7 FL Fs}



static void Test_BFu7c_Ul_Us()
{
  {
    init_simple_test("BFu7c_Ul_Us");
    static STRUCT_IF_C BFu7c_Ul_Us lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_Us, BFu7c_Ul_Us)
//============================================================================


struct  BFu7c_Ul_Vp  {
  unsigned char v1:7;
  __tsu64 v2;
  void *v3;
};
//SIG(1 BFu7c_Ul_Vp) C1{ Fc:7 FL Fp}



static void Test_BFu7c_Ul_Vp()
{
  {
    init_simple_test("BFu7c_Ul_Vp");
    static STRUCT_IF_C BFu7c_Ul_Vp lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Ul_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Ul_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Ul_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Ul_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Ul_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,12), "BFu7c_Ul_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Ul_Vp, BFu7c_Ul_Vp)
//============================================================================


struct  BFu7c_Us  {
  unsigned char v1:7;
  unsigned short v2;
};
//SIG(1 BFu7c_Us) C1{ Fc:7 Fs}



static void Test_BFu7c_Us()
{
  {
    init_simple_test("BFu7c_Us");
    static STRUCT_IF_C BFu7c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7c_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us");
    check_field_offset(lv, v2, 2, "BFu7c_Us.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us, BFu7c_Us)
//============================================================================


struct  BFu7c_Us_BFu15i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_Us_BFu15i) C1{ Fc:7 Fs Fi:15}



static void Test_BFu7c_Us_BFu15i()
{
  {
    init_simple_test("BFu7c_Us_BFu15i");
    static STRUCT_IF_C BFu7c_Us_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu15i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu15i.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_Us_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_Us_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu15i, BFu7c_Us_BFu15i)
//============================================================================


struct  BFu7c_Us_BFu15ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_Us_BFu15ll) C1{ Fc:7 Fs FL:15}



static void Test_BFu7c_Us_BFu15ll()
{
  {
    init_simple_test("BFu7c_Us_BFu15ll");
    static STRUCT_IF_C BFu7c_Us_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu15ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu15ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_Us_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_Us_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu15ll, BFu7c_Us_BFu15ll)
//============================================================================


struct  BFu7c_Us_BFu15s  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_Us_BFu15s) C1{ Fc:7 Fs Fs:15}



static void Test_BFu7c_Us_BFu15s()
{
  {
    init_simple_test("BFu7c_Us_BFu15s");
    static STRUCT_IF_C BFu7c_Us_BFu15s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu15s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu15s");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu15s.v2");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7c_Us_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7c_Us_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu15s, BFu7c_Us_BFu15s)
//============================================================================


struct  BFu7c_Us_BFu16i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_Us_BFu16i) C1{ Fc:7 Fs Fi:16}



static void Test_BFu7c_Us_BFu16i()
{
  {
    init_simple_test("BFu7c_Us_BFu16i");
    static STRUCT_IF_C BFu7c_Us_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu16i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu16i.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_Us_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_Us_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu16i, BFu7c_Us_BFu16i)
//============================================================================


struct  BFu7c_Us_BFu16ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_Us_BFu16ll) C1{ Fc:7 Fs FL:16}



static void Test_BFu7c_Us_BFu16ll()
{
  {
    init_simple_test("BFu7c_Us_BFu16ll");
    static STRUCT_IF_C BFu7c_Us_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu16ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu16ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_Us_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_Us_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu16ll, BFu7c_Us_BFu16ll)
//============================================================================


struct  BFu7c_Us_BFu16s  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_Us_BFu16s) C1{ Fc:7 Fs Fs:16}



static void Test_BFu7c_Us_BFu16s()
{
  {
    init_simple_test("BFu7c_Us_BFu16s");
    static STRUCT_IF_C BFu7c_Us_BFu16s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu16s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu16s");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu16s.v2");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7c_Us_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7c_Us_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu16s, BFu7c_Us_BFu16s)
//============================================================================


struct  BFu7c_Us_BFu17i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_Us_BFu17i) C1{ Fc:7 Fs Fi:17}



static void Test_BFu7c_Us_BFu17i()
{
  {
    init_simple_test("BFu7c_Us_BFu17i");
    static STRUCT_IF_C BFu7c_Us_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu17i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu17i.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_Us_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_Us_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu17i, BFu7c_Us_BFu17i)
//============================================================================


struct  BFu7c_Us_BFu17ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_Us_BFu17ll) C1{ Fc:7 Fs FL:17}



static void Test_BFu7c_Us_BFu17ll()
{
  {
    init_simple_test("BFu7c_Us_BFu17ll");
    static STRUCT_IF_C BFu7c_Us_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu17ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu17ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7c_Us_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7c_Us_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu17ll, BFu7c_Us_BFu17ll)
//============================================================================


struct  BFu7c_Us_BFu1c  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_Us_BFu1c) C1{ Fc:7 Fs Fc:1}



static void Test_BFu7c_Us_BFu1c()
{
  {
    init_simple_test("BFu7c_Us_BFu1c");
    static STRUCT_IF_C BFu7c_Us_BFu1c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu1c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu1c");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu1c.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_Us_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu1c, BFu7c_Us_BFu1c)
//============================================================================


struct  BFu7c_Us_BFu1i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_Us_BFu1i) C1{ Fc:7 Fs Fi:1}



static void Test_BFu7c_Us_BFu1i()
{
  {
    init_simple_test("BFu7c_Us_BFu1i");
    static STRUCT_IF_C BFu7c_Us_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu1i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu1i.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_Us_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu1i, BFu7c_Us_BFu1i)
//============================================================================


struct  BFu7c_Us_BFu1ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_Us_BFu1ll) C1{ Fc:7 Fs FL:1}



static void Test_BFu7c_Us_BFu1ll()
{
  {
    init_simple_test("BFu7c_Us_BFu1ll");
    static STRUCT_IF_C BFu7c_Us_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu1ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu1ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_Us_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu1ll, BFu7c_Us_BFu1ll)
//============================================================================


struct  BFu7c_Us_BFu1s  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_Us_BFu1s) C1{ Fc:7 Fs Fs:1}



static void Test_BFu7c_Us_BFu1s()
{
  {
    init_simple_test("BFu7c_Us_BFu1s");
    static STRUCT_IF_C BFu7c_Us_BFu1s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu1s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu1s");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu1s.v2");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7c_Us_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu1s, BFu7c_Us_BFu1s)
//============================================================================


struct  BFu7c_Us_BFu31i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_Us_BFu31i) C1{ Fc:7 Fs Fi:31}



static void Test_BFu7c_Us_BFu31i()
{
  {
    init_simple_test("BFu7c_Us_BFu31i");
    static STRUCT_IF_C BFu7c_Us_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu31i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu31i.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_Us_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_Us_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu31i, BFu7c_Us_BFu31i)
//============================================================================


struct  BFu7c_Us_BFu31ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_Us_BFu31ll) C1{ Fc:7 Fs FL:31}



static void Test_BFu7c_Us_BFu31ll()
{
  {
    init_simple_test("BFu7c_Us_BFu31ll");
    static STRUCT_IF_C BFu7c_Us_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu31ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu31ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7c_Us_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7c_Us_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu31ll, BFu7c_Us_BFu31ll)
//============================================================================


struct  BFu7c_Us_BFu32i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_Us_BFu32i) C1{ Fc:7 Fs Fi:32}



static void Test_BFu7c_Us_BFu32i()
{
  {
    init_simple_test("BFu7c_Us_BFu32i");
    static STRUCT_IF_C BFu7c_Us_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu32i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu32i.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_Us_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_Us_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu32i, BFu7c_Us_BFu32i)
//============================================================================


struct  BFu7c_Us_BFu32ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_Us_BFu32ll) C1{ Fc:7 Fs FL:32}



static void Test_BFu7c_Us_BFu32ll()
{
  {
    init_simple_test("BFu7c_Us_BFu32ll");
    static STRUCT_IF_C BFu7c_Us_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu32ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu32ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7c_Us_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7c_Us_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu32ll, BFu7c_Us_BFu32ll)
//============================================================================


struct  BFu7c_Us_BFu33  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_Us_BFu33) C1{ Fc:7 Fs FL:33}



static void Test_BFu7c_Us_BFu33()
{
  {
    init_simple_test("BFu7c_Us_BFu33");
    static STRUCT_IF_C BFu7c_Us_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Us_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu33");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7c_Us_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7c_Us_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu33, BFu7c_Us_BFu33)
//============================================================================


struct  BFu7c_Us_BFu7c  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_Us_BFu7c) C1{ Fc:7 Fs Fc:7}



static void Test_BFu7c_Us_BFu7c()
{
  {
    init_simple_test("BFu7c_Us_BFu7c");
    static STRUCT_IF_C BFu7c_Us_BFu7c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu7c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu7c");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu7c.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_Us_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu7c, BFu7c_Us_BFu7c)
//============================================================================


struct  BFu7c_Us_BFu7i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_Us_BFu7i) C1{ Fc:7 Fs Fi:7}



static void Test_BFu7c_Us_BFu7i()
{
  {
    init_simple_test("BFu7c_Us_BFu7i");
    static STRUCT_IF_C BFu7c_Us_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu7i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu7i.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_Us_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu7i, BFu7c_Us_BFu7i)
//============================================================================


struct  BFu7c_Us_BFu7ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_Us_BFu7ll) C1{ Fc:7 Fs FL:7}



static void Test_BFu7c_Us_BFu7ll()
{
  {
    init_simple_test("BFu7c_Us_BFu7ll");
    static STRUCT_IF_C BFu7c_Us_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu7ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu7ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_Us_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu7ll, BFu7c_Us_BFu7ll)
//============================================================================


struct  BFu7c_Us_BFu7s  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_Us_BFu7s) C1{ Fc:7 Fs Fs:7}



static void Test_BFu7c_Us_BFu7s()
{
  {
    init_simple_test("BFu7c_Us_BFu7s");
    static STRUCT_IF_C BFu7c_Us_BFu7s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu7s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu7s");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu7s.v2");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7c_Us_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu7s, BFu7c_Us_BFu7s)
//============================================================================


struct  BFu7c_Us_BFu8c  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_Us_BFu8c) C1{ Fc:7 Fs Fc:8}



static void Test_BFu7c_Us_BFu8c()
{
  {
    init_simple_test("BFu7c_Us_BFu8c");
    static STRUCT_IF_C BFu7c_Us_BFu8c lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu8c)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu8c");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu8c.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_Us_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_Us_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu8c, BFu7c_Us_BFu8c)
//============================================================================


struct  BFu7c_Us_BFu8i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_Us_BFu8i) C1{ Fc:7 Fs Fi:8}



static void Test_BFu7c_Us_BFu8i()
{
  {
    init_simple_test("BFu7c_Us_BFu8i");
    static STRUCT_IF_C BFu7c_Us_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu8i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu8i.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_Us_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_Us_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu8i, BFu7c_Us_BFu8i)
//============================================================================


struct  BFu7c_Us_BFu8ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_Us_BFu8ll) C1{ Fc:7 Fs FL:8}



static void Test_BFu7c_Us_BFu8ll()
{
  {
    init_simple_test("BFu7c_Us_BFu8ll");
    static STRUCT_IF_C BFu7c_Us_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu8ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu8ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_Us_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_Us_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu8ll, BFu7c_Us_BFu8ll)
//============================================================================


struct  BFu7c_Us_BFu8s  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_Us_BFu8s) C1{ Fc:7 Fs Fs:8}



static void Test_BFu7c_Us_BFu8s()
{
  {
    init_simple_test("BFu7c_Us_BFu8s");
    static STRUCT_IF_C BFu7c_Us_BFu8s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu8s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu8s");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu8s.v2");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7c_Us_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7c_Us_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu8s, BFu7c_Us_BFu8s)
//============================================================================


struct  BFu7c_Us_BFu9i  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_Us_BFu9i) C1{ Fc:7 Fs Fi:9}



static void Test_BFu7c_Us_BFu9i()
{
  {
    init_simple_test("BFu7c_Us_BFu9i");
    static STRUCT_IF_C BFu7c_Us_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu9i");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu9i.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_Us_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_Us_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu9i, BFu7c_Us_BFu9i)
//============================================================================


struct  BFu7c_Us_BFu9ll  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_Us_BFu9ll) C1{ Fc:7 Fs FL:9}



static void Test_BFu7c_Us_BFu9ll()
{
  {
    init_simple_test("BFu7c_Us_BFu9ll");
    static STRUCT_IF_C BFu7c_Us_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu9ll");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu9ll.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_Us_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_Us_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu9ll, BFu7c_Us_BFu9ll)
//============================================================================


struct  BFu7c_Us_BFu9s  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_Us_BFu9s) C1{ Fc:7 Fs Fs:9}



static void Test_BFu7c_Us_BFu9s()
{
  {
    init_simple_test("BFu7c_Us_BFu9s");
    static STRUCT_IF_C BFu7c_Us_BFu9s lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_BFu9s)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_BFu9s");
    check_field_offset(lv, v2, 2, "BFu7c_Us_BFu9s.v2");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7c_Us_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7c_Us_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_BFu9s, BFu7c_Us_BFu9s)
//============================================================================


struct  BFu7c_Us_C  {
  unsigned char v1:7;
  unsigned short v2;
  char v3;
};
//SIG(1 BFu7c_Us_C) C1{ Fc:7 Fs Fc}



static void Test_BFu7c_Us_C()
{
  {
    init_simple_test("BFu7c_Us_C");
    static STRUCT_IF_C BFu7c_Us_C lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_C)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_C");
    check_field_offset(lv, v2, 2, "BFu7c_Us_C.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Us_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_C, BFu7c_Us_C)
//============================================================================


struct  BFu7c_Us_D  {
  unsigned char v1:7;
  unsigned short v2;
  double v3;
};
//SIG(1 BFu7c_Us_D) C1{ Fc:7 Fs FL}



static void Test_BFu7c_Us_D()
{
  {
    init_simple_test("BFu7c_Us_D");
    static STRUCT_IF_C BFu7c_Us_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Us_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_D");
    check_field_offset(lv, v2, 2, "BFu7c_Us_D.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Us_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_D, BFu7c_Us_D)
//============================================================================


struct  BFu7c_Us_F  {
  unsigned char v1:7;
  unsigned short v2;
  float v3;
};
//SIG(1 BFu7c_Us_F) C1{ Fc:7 Fs Fi}



static void Test_BFu7c_Us_F()
{
  {
    init_simple_test("BFu7c_Us_F");
    static STRUCT_IF_C BFu7c_Us_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_F");
    check_field_offset(lv, v2, 2, "BFu7c_Us_F.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Us_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_F, BFu7c_Us_F)
//============================================================================


struct  BFu7c_Us_I  {
  unsigned char v1:7;
  unsigned short v2;
  int v3;
};
//SIG(1 BFu7c_Us_I) C1{ Fc:7 Fs Fi}



static void Test_BFu7c_Us_I()
{
  {
    init_simple_test("BFu7c_Us_I");
    static STRUCT_IF_C BFu7c_Us_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_I");
    check_field_offset(lv, v2, 2, "BFu7c_Us_I.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Us_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_I, BFu7c_Us_I)
//============================================================================


struct  BFu7c_Us_Ip  {
  unsigned char v1:7;
  unsigned short v2;
  int *v3;
};
//SIG(1 BFu7c_Us_Ip) C1{ Fc:7 Fs Fp}



static void Test_BFu7c_Us_Ip()
{
  {
    init_simple_test("BFu7c_Us_Ip");
    static STRUCT_IF_C BFu7c_Us_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Us_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_Ip");
    check_field_offset(lv, v2, 2, "BFu7c_Us_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Us_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_Ip, BFu7c_Us_Ip)
//============================================================================


struct  BFu7c_Us_L  {
  unsigned char v1:7;
  unsigned short v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_Us_L) C1{ Fc:7 Fs FL}



static void Test_BFu7c_Us_L()
{
  {
    init_simple_test("BFu7c_Us_L");
    static STRUCT_IF_C BFu7c_Us_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Us_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_L");
    check_field_offset(lv, v2, 2, "BFu7c_Us_L.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Us_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_L, BFu7c_Us_L)
//============================================================================


struct  BFu7c_Us_S  {
  unsigned char v1:7;
  unsigned short v2;
  short v3;
};
//SIG(1 BFu7c_Us_S) C1{ Fc:7 Fs[2]}



static void Test_BFu7c_Us_S()
{
  {
    init_simple_test("BFu7c_Us_S");
    static STRUCT_IF_C BFu7c_Us_S lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_S)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_S");
    check_field_offset(lv, v2, 2, "BFu7c_Us_S.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Us_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_S, BFu7c_Us_S)
//============================================================================


struct  BFu7c_Us_Uc  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned char v3;
};
//SIG(1 BFu7c_Us_Uc) C1{ Fc:7 Fs Fc}



static void Test_BFu7c_Us_Uc()
{
  {
    init_simple_test("BFu7c_Us_Uc");
    static STRUCT_IF_C BFu7c_Us_Uc lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_Uc)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_Uc");
    check_field_offset(lv, v2, 2, "BFu7c_Us_Uc.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Us_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_Uc, BFu7c_Us_Uc)
//============================================================================


struct  BFu7c_Us_Ui  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned int v3;
};
//SIG(1 BFu7c_Us_Ui) C1{ Fc:7 Fs Fi}



static void Test_BFu7c_Us_Ui()
{
  {
    init_simple_test("BFu7c_Us_Ui");
    static STRUCT_IF_C BFu7c_Us_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7c_Us_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7c_Us_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_Ui");
    check_field_offset(lv, v2, 2, "BFu7c_Us_Ui.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Us_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_Ui, BFu7c_Us_Ui)
//============================================================================


struct  BFu7c_Us_Ul  {
  unsigned char v1:7;
  unsigned short v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_Us_Ul) C1{ Fc:7 Fs FL}



static void Test_BFu7c_Us_Ul()
{
  {
    init_simple_test("BFu7c_Us_Ul");
    static STRUCT_IF_C BFu7c_Us_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7c_Us_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_Ul");
    check_field_offset(lv, v2, 2, "BFu7c_Us_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Us_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_Ul, BFu7c_Us_Ul)
//============================================================================


struct  BFu7c_Us_Us  {
  unsigned char v1:7;
  unsigned short v2;
  unsigned short v3;
};
//SIG(1 BFu7c_Us_Us) C1{ Fc:7 Fs[2]}



static void Test_BFu7c_Us_Us()
{
  {
    init_simple_test("BFu7c_Us_Us");
    static STRUCT_IF_C BFu7c_Us_Us lv;
    check2(sizeof(lv), 6, "sizeof(BFu7c_Us_Us)");
    check2(__alignof__(lv), 2, "__alignof__(BFu7c_Us_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_Us");
    check_field_offset(lv, v2, 2, "BFu7c_Us_Us.v2");
    check_field_offset(lv, v3, 4, "BFu7c_Us_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_Us, BFu7c_Us_Us)
//============================================================================


struct  BFu7c_Us_Vp  {
  unsigned char v1:7;
  unsigned short v2;
  void *v3;
};
//SIG(1 BFu7c_Us_Vp) C1{ Fc:7 Fs Fp}



static void Test_BFu7c_Us_Vp()
{
  {
    init_simple_test("BFu7c_Us_Vp");
    static STRUCT_IF_C BFu7c_Us_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Us_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Us_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Us_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Us_Vp");
    check_field_offset(lv, v2, 2, "BFu7c_Us_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7c_Us_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Us_Vp, BFu7c_Us_Vp)
//============================================================================


struct  BFu7c_Vp  {
  unsigned char v1:7;
  void *v2;
};
//SIG(1 BFu7c_Vp) C1{ Fc:7 Fp}



static void Test_BFu7c_Vp()
{
  {
    init_simple_test("BFu7c_Vp");
    static STRUCT_IF_C BFu7c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp.v2");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp, BFu7c_Vp)
//============================================================================


struct  BFu7c_Vp_BFu15i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:15;
};
//SIG(1 BFu7c_Vp_BFu15i) C1{ Fc:7 Fp Fi:15}



static void Test_BFu7c_Vp_BFu15i()
{
  {
    init_simple_test("BFu7c_Vp_BFu15i");
    static STRUCT_IF_C BFu7c_Vp_BFu15i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu15i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu15i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7c_Vp_BFu15i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7c_Vp_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu15i, BFu7c_Vp_BFu15i)
//============================================================================


struct  BFu7c_Vp_BFu15ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:15;
};
//SIG(1 BFu7c_Vp_BFu15ll) C1{ Fc:7 Fp FL:15}



static void Test_BFu7c_Vp_BFu15ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu15ll");
    static STRUCT_IF_C BFu7c_Vp_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu15ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu15ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7c_Vp_BFu15ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7c_Vp_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu15ll, BFu7c_Vp_BFu15ll)
//============================================================================


struct  BFu7c_Vp_BFu15s  {
  unsigned char v1:7;
  void *v2;
  unsigned short v3:15;
};
//SIG(1 BFu7c_Vp_BFu15s) C1{ Fc:7 Fp Fs:15}



static void Test_BFu7c_Vp_BFu15s()
{
  {
    init_simple_test("BFu7c_Vp_BFu15s");
    static STRUCT_IF_C BFu7c_Vp_BFu15s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu15s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu15s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, 1, "BFu7c_Vp_BFu15s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 15, hide_ull(1LL<<14), "BFu7c_Vp_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu15s, BFu7c_Vp_BFu15s)
//============================================================================


struct  BFu7c_Vp_BFu16i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:16;
};
//SIG(1 BFu7c_Vp_BFu16i) C1{ Fc:7 Fp Fi:16}



static void Test_BFu7c_Vp_BFu16i()
{
  {
    init_simple_test("BFu7c_Vp_BFu16i");
    static STRUCT_IF_C BFu7c_Vp_BFu16i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu16i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu16i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7c_Vp_BFu16i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7c_Vp_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu16i, BFu7c_Vp_BFu16i)
//============================================================================


struct  BFu7c_Vp_BFu16ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:16;
};
//SIG(1 BFu7c_Vp_BFu16ll) C1{ Fc:7 Fp FL:16}



static void Test_BFu7c_Vp_BFu16ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu16ll");
    static STRUCT_IF_C BFu7c_Vp_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu16ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu16ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7c_Vp_BFu16ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7c_Vp_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu16ll, BFu7c_Vp_BFu16ll)
//============================================================================


struct  BFu7c_Vp_BFu16s  {
  unsigned char v1:7;
  void *v2;
  unsigned short v3:16;
};
//SIG(1 BFu7c_Vp_BFu16s) C1{ Fc:7 Fp Fs:16}



static void Test_BFu7c_Vp_BFu16s()
{
  {
    init_simple_test("BFu7c_Vp_BFu16s");
    static STRUCT_IF_C BFu7c_Vp_BFu16s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu16s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu16s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, 1, "BFu7c_Vp_BFu16s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 16, hide_ull(1LL<<15), "BFu7c_Vp_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu16s, BFu7c_Vp_BFu16s)
//============================================================================


struct  BFu7c_Vp_BFu17i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:17;
};
//SIG(1 BFu7c_Vp_BFu17i) C1{ Fc:7 Fp Fi:17}



static void Test_BFu7c_Vp_BFu17i()
{
  {
    init_simple_test("BFu7c_Vp_BFu17i");
    static STRUCT_IF_C BFu7c_Vp_BFu17i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu17i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu17i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7c_Vp_BFu17i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7c_Vp_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu17i, BFu7c_Vp_BFu17i)
//============================================================================


struct  BFu7c_Vp_BFu17ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:17;
};
//SIG(1 BFu7c_Vp_BFu17ll) C1{ Fc:7 Fp FL:17}



static void Test_BFu7c_Vp_BFu17ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu17ll");
    static STRUCT_IF_C BFu7c_Vp_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu17ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu17ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, 1, "BFu7c_Vp_BFu17ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 17, hide_ull(1LL<<16), "BFu7c_Vp_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu17ll, BFu7c_Vp_BFu17ll)
//============================================================================


struct  BFu7c_Vp_BFu1c  {
  unsigned char v1:7;
  void *v2;
  unsigned char v3:1;
};
//SIG(1 BFu7c_Vp_BFu1c) C1{ Fc:7 Fp Fc:1}



static void Test_BFu7c_Vp_BFu1c()
{
  {
    init_simple_test("BFu7c_Vp_BFu1c");
    static STRUCT_IF_C BFu7c_Vp_BFu1c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu1c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu1c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7c_Vp_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu1c, BFu7c_Vp_BFu1c)
//============================================================================


struct  BFu7c_Vp_BFu1i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:1;
};
//SIG(1 BFu7c_Vp_BFu1i) C1{ Fc:7 Fp Fi:1}



static void Test_BFu7c_Vp_BFu1i()
{
  {
    init_simple_test("BFu7c_Vp_BFu1i");
    static STRUCT_IF_C BFu7c_Vp_BFu1i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu1i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu1i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7c_Vp_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu1i, BFu7c_Vp_BFu1i)
//============================================================================


struct  BFu7c_Vp_BFu1ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:1;
};
//SIG(1 BFu7c_Vp_BFu1ll) C1{ Fc:7 Fp FL:1}



static void Test_BFu7c_Vp_BFu1ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu1ll");
    static STRUCT_IF_C BFu7c_Vp_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu1ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu1ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7c_Vp_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu1ll, BFu7c_Vp_BFu1ll)
//============================================================================


struct  BFu7c_Vp_BFu1s  {
  unsigned char v1:7;
  void *v2;
  unsigned short v3:1;
};
//SIG(1 BFu7c_Vp_BFu1s) C1{ Fc:7 Fp Fs:1}



static void Test_BFu7c_Vp_BFu1s()
{
  {
    init_simple_test("BFu7c_Vp_BFu1s");
    static STRUCT_IF_C BFu7c_Vp_BFu1s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu1s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu1s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 1, 1, "BFu7c_Vp_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu1s, BFu7c_Vp_BFu1s)
//============================================================================


struct  BFu7c_Vp_BFu31i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:31;
};
//SIG(1 BFu7c_Vp_BFu31i) C1{ Fc:7 Fp Fi:31}



static void Test_BFu7c_Vp_BFu31i()
{
  {
    init_simple_test("BFu7c_Vp_BFu31i");
    static STRUCT_IF_C BFu7c_Vp_BFu31i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu31i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu31i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7c_Vp_BFu31i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7c_Vp_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu31i, BFu7c_Vp_BFu31i)
//============================================================================


struct  BFu7c_Vp_BFu31ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:31;
};
//SIG(1 BFu7c_Vp_BFu31ll) C1{ Fc:7 Fp FL:31}



static void Test_BFu7c_Vp_BFu31ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu31ll");
    static STRUCT_IF_C BFu7c_Vp_BFu31ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu31ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu31ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, 1, "BFu7c_Vp_BFu31ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 31, hide_ull(1LL<<30), "BFu7c_Vp_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu31ll, BFu7c_Vp_BFu31ll)
//============================================================================


struct  BFu7c_Vp_BFu32i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:32;
};
//SIG(1 BFu7c_Vp_BFu32i) C1{ Fc:7 Fp Fi:32}



static void Test_BFu7c_Vp_BFu32i()
{
  {
    init_simple_test("BFu7c_Vp_BFu32i");
    static STRUCT_IF_C BFu7c_Vp_BFu32i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu32i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu32i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7c_Vp_BFu32i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7c_Vp_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu32i, BFu7c_Vp_BFu32i)
//============================================================================


struct  BFu7c_Vp_BFu32ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:32;
};
//SIG(1 BFu7c_Vp_BFu32ll) C1{ Fc:7 Fp FL:32}



static void Test_BFu7c_Vp_BFu32ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu32ll");
    static STRUCT_IF_C BFu7c_Vp_BFu32ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu32ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu32ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, 1, "BFu7c_Vp_BFu32ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 32, hide_ull(1LL<<31), "BFu7c_Vp_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu32ll, BFu7c_Vp_BFu32ll)
//============================================================================


struct  BFu7c_Vp_BFu33  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:33;
};
//SIG(1 BFu7c_Vp_BFu33) C1{ Fc:7 Fp FL:33}



static void Test_BFu7c_Vp_BFu33()
{
  {
    init_simple_test("BFu7c_Vp_BFu33");
    static STRUCT_IF_C BFu7c_Vp_BFu33 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Vp_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu33");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu33.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, 1, "BFu7c_Vp_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 33, hide_ull(1LL<<32), "BFu7c_Vp_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu33, BFu7c_Vp_BFu33)
//============================================================================


struct  BFu7c_Vp_BFu7c  {
  unsigned char v1:7;
  void *v2;
  unsigned char v3:7;
};
//SIG(1 BFu7c_Vp_BFu7c) C1{ Fc:7 Fp Fc:7}



static void Test_BFu7c_Vp_BFu7c()
{
  {
    init_simple_test("BFu7c_Vp_BFu7c");
    static STRUCT_IF_C BFu7c_Vp_BFu7c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu7c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu7c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7c_Vp_BFu7c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu7c, BFu7c_Vp_BFu7c)
//============================================================================


struct  BFu7c_Vp_BFu7i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:7;
};
//SIG(1 BFu7c_Vp_BFu7i) C1{ Fc:7 Fp Fi:7}



static void Test_BFu7c_Vp_BFu7i()
{
  {
    init_simple_test("BFu7c_Vp_BFu7i");
    static STRUCT_IF_C BFu7c_Vp_BFu7i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu7i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu7i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7c_Vp_BFu7i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu7i, BFu7c_Vp_BFu7i)
//============================================================================


struct  BFu7c_Vp_BFu7ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:7;
};
//SIG(1 BFu7c_Vp_BFu7ll) C1{ Fc:7 Fp FL:7}



static void Test_BFu7c_Vp_BFu7ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu7ll");
    static STRUCT_IF_C BFu7c_Vp_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu7ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu7ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7c_Vp_BFu7ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu7ll, BFu7c_Vp_BFu7ll)
//============================================================================


struct  BFu7c_Vp_BFu7s  {
  unsigned char v1:7;
  void *v2;
  unsigned short v3:7;
};
//SIG(1 BFu7c_Vp_BFu7s) C1{ Fc:7 Fp Fs:7}



static void Test_BFu7c_Vp_BFu7s()
{
  {
    init_simple_test("BFu7c_Vp_BFu7s");
    static STRUCT_IF_C BFu7c_Vp_BFu7s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu7s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu7s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, 1, "BFu7c_Vp_BFu7s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu7s, BFu7c_Vp_BFu7s)
//============================================================================


struct  BFu7c_Vp_BFu8c  {
  unsigned char v1:7;
  void *v2;
  unsigned char v3:8;
};
//SIG(1 BFu7c_Vp_BFu8c) C1{ Fc:7 Fp Fc:8}



static void Test_BFu7c_Vp_BFu8c()
{
  {
    init_simple_test("BFu7c_Vp_BFu8c");
    static STRUCT_IF_C BFu7c_Vp_BFu8c lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu8c");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu8c.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7c_Vp_BFu8c");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7c_Vp_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu8c, BFu7c_Vp_BFu8c)
//============================================================================


struct  BFu7c_Vp_BFu8i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:8;
};
//SIG(1 BFu7c_Vp_BFu8i) C1{ Fc:7 Fp Fi:8}



static void Test_BFu7c_Vp_BFu8i()
{
  {
    init_simple_test("BFu7c_Vp_BFu8i");
    static STRUCT_IF_C BFu7c_Vp_BFu8i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu8i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu8i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7c_Vp_BFu8i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7c_Vp_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu8i, BFu7c_Vp_BFu8i)
//============================================================================


struct  BFu7c_Vp_BFu8ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:8;
};
//SIG(1 BFu7c_Vp_BFu8ll) C1{ Fc:7 Fp FL:8}



static void Test_BFu7c_Vp_BFu8ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu8ll");
    static STRUCT_IF_C BFu7c_Vp_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu8ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu8ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7c_Vp_BFu8ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7c_Vp_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu8ll, BFu7c_Vp_BFu8ll)
//============================================================================


struct  BFu7c_Vp_BFu8s  {
  unsigned char v1:7;
  void *v2;
  unsigned short v3:8;
};
//SIG(1 BFu7c_Vp_BFu8s) C1{ Fc:7 Fp Fs:8}



static void Test_BFu7c_Vp_BFu8s()
{
  {
    init_simple_test("BFu7c_Vp_BFu8s");
    static STRUCT_IF_C BFu7c_Vp_BFu8s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu8s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu8s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, 1, "BFu7c_Vp_BFu8s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 8, hide_ull(1LL<<7), "BFu7c_Vp_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu8s, BFu7c_Vp_BFu8s)
//============================================================================


struct  BFu7c_Vp_BFu9i  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3:9;
};
//SIG(1 BFu7c_Vp_BFu9i) C1{ Fc:7 Fp Fi:9}



static void Test_BFu7c_Vp_BFu9i()
{
  {
    init_simple_test("BFu7c_Vp_BFu9i");
    static STRUCT_IF_C BFu7c_Vp_BFu9i lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu9i");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu9i.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7c_Vp_BFu9i");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7c_Vp_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu9i, BFu7c_Vp_BFu9i)
//============================================================================


struct  BFu7c_Vp_BFu9ll  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3:9;
};
//SIG(1 BFu7c_Vp_BFu9ll) C1{ Fc:7 Fp FL:9}



static void Test_BFu7c_Vp_BFu9ll()
{
  {
    init_simple_test("BFu7c_Vp_BFu9ll");
    static STRUCT_IF_C BFu7c_Vp_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu9ll");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu9ll.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7c_Vp_BFu9ll");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7c_Vp_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu9ll, BFu7c_Vp_BFu9ll)
//============================================================================


struct  BFu7c_Vp_BFu9s  {
  unsigned char v1:7;
  void *v2;
  unsigned short v3:9;
};
//SIG(1 BFu7c_Vp_BFu9s) C1{ Fc:7 Fp Fs:9}



static void Test_BFu7c_Vp_BFu9s()
{
  {
    init_simple_test("BFu7c_Vp_BFu9s");
    static STRUCT_IF_C BFu7c_Vp_BFu9s lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_BFu9s");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_BFu9s.v2");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, 1, "BFu7c_Vp_BFu9s");
    set_bf_and_test(lv, v3, ABISELECT(16,8), 0, 9, hide_ull(1LL<<8), "BFu7c_Vp_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_BFu9s, BFu7c_Vp_BFu9s)
//============================================================================


struct  BFu7c_Vp_C  {
  unsigned char v1:7;
  void *v2;
  char v3;
};
//SIG(1 BFu7c_Vp_C) C1{ Fc:7 Fp Fc}



static void Test_BFu7c_Vp_C()
{
  {
    init_simple_test("BFu7c_Vp_C");
    static STRUCT_IF_C BFu7c_Vp_C lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_C");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_C.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_C, BFu7c_Vp_C)
//============================================================================


struct  BFu7c_Vp_D  {
  unsigned char v1:7;
  void *v2;
  double v3;
};
//SIG(1 BFu7c_Vp_D) C1{ Fc:7 Fp FL}



static void Test_BFu7c_Vp_D()
{
  {
    init_simple_test("BFu7c_Vp_D");
    static STRUCT_IF_C BFu7c_Vp_D lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Vp_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_D");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_D.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_D, BFu7c_Vp_D)
//============================================================================


struct  BFu7c_Vp_F  {
  unsigned char v1:7;
  void *v2;
  float v3;
};
//SIG(1 BFu7c_Vp_F) C1{ Fc:7 Fp Fi}



static void Test_BFu7c_Vp_F()
{
  {
    init_simple_test("BFu7c_Vp_F");
    static STRUCT_IF_C BFu7c_Vp_F lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_F");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_F.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_F, BFu7c_Vp_F)
//============================================================================


struct  BFu7c_Vp_I  {
  unsigned char v1:7;
  void *v2;
  int v3;
};
//SIG(1 BFu7c_Vp_I) C1{ Fc:7 Fp Fi}



static void Test_BFu7c_Vp_I()
{
  {
    init_simple_test("BFu7c_Vp_I");
    static STRUCT_IF_C BFu7c_Vp_I lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_I");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_I.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_I, BFu7c_Vp_I)
//============================================================================


struct  BFu7c_Vp_Ip  {
  unsigned char v1:7;
  void *v2;
  int *v3;
};
//SIG(1 BFu7c_Vp_Ip) C1{ Fc:7 Fp[2]}



static void Test_BFu7c_Vp_Ip()
{
  {
    init_simple_test("BFu7c_Vp_Ip");
    static STRUCT_IF_C BFu7c_Vp_Ip lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_Ip");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_Ip.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_Ip, BFu7c_Vp_Ip)
//============================================================================


struct  BFu7c_Vp_L  {
  unsigned char v1:7;
  void *v2;
  __tsi64 v3;
};
//SIG(1 BFu7c_Vp_L) C1{ Fc:7 Fp FL}



static void Test_BFu7c_Vp_L()
{
  {
    init_simple_test("BFu7c_Vp_L");
    static STRUCT_IF_C BFu7c_Vp_L lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Vp_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_L");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_L.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_L, BFu7c_Vp_L)
//============================================================================


struct  BFu7c_Vp_S  {
  unsigned char v1:7;
  void *v2;
  short v3;
};
//SIG(1 BFu7c_Vp_S) C1{ Fc:7 Fp Fs}



static void Test_BFu7c_Vp_S()
{
  {
    init_simple_test("BFu7c_Vp_S");
    static STRUCT_IF_C BFu7c_Vp_S lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_S");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_S.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_S, BFu7c_Vp_S)
//============================================================================


struct  BFu7c_Vp_Uc  {
  unsigned char v1:7;
  void *v2;
  unsigned char v3;
};
//SIG(1 BFu7c_Vp_Uc) C1{ Fc:7 Fp Fc}



static void Test_BFu7c_Vp_Uc()
{
  {
    init_simple_test("BFu7c_Vp_Uc");
    static STRUCT_IF_C BFu7c_Vp_Uc lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_Uc");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_Uc.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_Uc, BFu7c_Vp_Uc)
//============================================================================


struct  BFu7c_Vp_Ui  {
  unsigned char v1:7;
  void *v2;
  unsigned int v3;
};
//SIG(1 BFu7c_Vp_Ui) C1{ Fc:7 Fp Fi}



static void Test_BFu7c_Vp_Ui()
{
  {
    init_simple_test("BFu7c_Vp_Ui");
    static STRUCT_IF_C BFu7c_Vp_Ui lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_Ui");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_Ui.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_Ui, BFu7c_Vp_Ui)
//============================================================================


struct  BFu7c_Vp_Ul  {
  unsigned char v1:7;
  void *v2;
  __tsu64 v3;
};
//SIG(1 BFu7c_Vp_Ul) C1{ Fc:7 Fp FL}



static void Test_BFu7c_Vp_Ul()
{
  {
    init_simple_test("BFu7c_Vp_Ul");
    static STRUCT_IF_C BFu7c_Vp_Ul lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(BFu7c_Vp_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_Ul");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_Ul.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_Ul, BFu7c_Vp_Ul)
//============================================================================


struct  BFu7c_Vp_Us  {
  unsigned char v1:7;
  void *v2;
  unsigned short v3;
};
//SIG(1 BFu7c_Vp_Us) C1{ Fc:7 Fp Fs}



static void Test_BFu7c_Vp_Us()
{
  {
    init_simple_test("BFu7c_Vp_Us");
    static STRUCT_IF_C BFu7c_Vp_Us lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_Us");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_Us.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_Us, BFu7c_Vp_Us)
//============================================================================


struct  BFu7c_Vp_Vp  {
  unsigned char v1:7;
  void *v2;
  void *v3;
};
//SIG(1 BFu7c_Vp_Vp) C1{ Fc:7 Fp[2]}



static void Test_BFu7c_Vp_Vp()
{
  {
    init_simple_test("BFu7c_Vp_Vp");
    static STRUCT_IF_C BFu7c_Vp_Vp lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(BFu7c_Vp_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7c_Vp_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7c_Vp_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7c_Vp_Vp");
    check_field_offset(lv, v2, ABISELECT(8,4), "BFu7c_Vp_Vp.v2");
    check_field_offset(lv, v3, ABISELECT(16,8), "BFu7c_Vp_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7c_Vp_Vp, BFu7c_Vp_Vp)
//============================================================================


struct  BFu7i  {
  unsigned int v1:7;
};
//SIG(1 BFu7i) C1{ Fi:7}



static void Test_BFu7i()
{
  {
    init_simple_test("BFu7i");
    static STRUCT_IF_C BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i, BFu7i)
//============================================================================


struct  BFu7i_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
};
//SIG(1 BFu7i_BFs7c) C1{ Fi:7 Fc:7}



static void Test_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c, BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c, BFu7i_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7c_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c_BFs7c, BFu7i_BFs7c_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7c_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c_BFs7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c_BFs7i, BFu7i_BFs7c_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7c_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c_BFs7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c_BFs7ll, BFu7i_BFs7c_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7c_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c_BFs7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c_BFs7s, BFu7i_BFs7c_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFs7c_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c_BFu7c, BFu7i_BFs7c_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7c_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c_BFu7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c_BFu7i, BFu7i_BFs7c_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7c_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c_BFu7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c_BFu7ll, BFu7i_BFs7c_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7c_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7c_BFu7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7c_BFu7s, BFu7i_BFs7c_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7c_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i) C1{ Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i, BFu7i_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7i_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i_BFs7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i_BFs7c, BFu7i_BFs7c_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7i_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i_BFs7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i_BFs7i, BFu7i_BFs7c_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7i_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i_BFs7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i_BFs7ll, BFu7i_BFs7c_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7i_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i_BFs7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i_BFs7s, BFu7i_BFs7c_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFs7i_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i_BFu7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i_BFu7c, BFu7i_BFs7c_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7i_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i_BFu7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i_BFu7i, BFu7i_BFs7c_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7i_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i_BFu7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i_BFu7ll, BFu7i_BFs7c_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7i_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7i_BFu7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7i_BFu7s, BFu7i_BFs7c_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll) C1{ Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll, BFu7i_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll_BFs7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll_BFs7c, BFu7i_BFs7c_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll_BFs7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll_BFs7i, BFu7i_BFs7c_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll_BFs7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll_BFs7ll, BFu7i_BFs7c_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll_BFs7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll_BFs7s, BFu7i_BFs7c_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll_BFu7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll_BFu7c, BFu7i_BFs7c_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll_BFu7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll_BFu7i, BFu7i_BFs7c_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll_BFu7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll_BFu7ll, BFu7i_BFs7c_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7ll_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7ll_BFu7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7ll_BFu7s, BFu7i_BFs7c_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7c_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s) C1{ Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s, BFu7i_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFs7s_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s_BFs7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s_BFs7c, BFu7i_BFs7c_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7s_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s_BFs7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s_BFs7i, BFu7i_BFs7c_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7s_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s_BFs7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s_BFs7ll, BFu7i_BFs7c_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7s_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s_BFs7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s_BFs7s, BFu7i_BFs7c_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFs7s_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s_BFu7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7c_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s_BFu7c, BFu7i_BFs7c_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFs7s_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s_BFu7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7c_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s_BFu7i, BFu7i_BFs7c_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFs7s_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s_BFu7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7c_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s_BFu7ll, BFu7i_BFs7c_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFs7s_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFs7s_BFu7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7c_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFs7s_BFu7s, BFu7i_BFs7c_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c, BFu7i_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7c_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c_BFs7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c_BFs7c, BFu7i_BFs7c_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7c_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c_BFs7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c_BFs7i, BFu7i_BFs7c_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7c_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c_BFs7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c_BFs7ll, BFu7i_BFs7c_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7c_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c_BFs7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c_BFs7s, BFu7i_BFs7c_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7c_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c_BFu7c) C1{ Fi:7 Fc:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c_BFu7c, BFu7i_BFs7c_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7c_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c_BFu7i) C1{ Fi:7 Fc:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c_BFu7i, BFu7i_BFs7c_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7c_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c_BFu7ll) C1{ Fi:7 Fc:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c_BFu7ll, BFu7i_BFs7c_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7c_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7c_BFu7s) C1{ Fi:7 Fc:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7c_BFu7s, BFu7i_BFs7c_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i) C1{ Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i, BFu7i_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7i_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i_BFs7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i_BFs7c, BFu7i_BFs7c_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7i_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i_BFs7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i_BFs7i, BFu7i_BFs7c_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7i_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i_BFs7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i_BFs7ll, BFu7i_BFs7c_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7i_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i_BFs7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i_BFs7s, BFu7i_BFs7c_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7i_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i_BFu7c) C1{ Fi:7 Fc:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i_BFu7c, BFu7i_BFs7c_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7i_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i_BFu7i) C1{ Fi:7 Fc:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i_BFu7i, BFu7i_BFs7c_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7i_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i_BFu7ll) C1{ Fi:7 Fc:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i_BFu7ll, BFu7i_BFs7c_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7i_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7i_BFu7s) C1{ Fi:7 Fc:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7i_BFu7s, BFu7i_BFs7c_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll) C1{ Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll, BFu7i_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll_BFs7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll_BFs7c, BFu7i_BFs7c_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll_BFs7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll_BFs7i, BFu7i_BFs7c_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll_BFs7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll_BFs7ll, BFu7i_BFs7c_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll_BFs7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll_BFs7s, BFu7i_BFs7c_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll_BFu7c) C1{ Fi:7 Fc:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll_BFu7c, BFu7i_BFs7c_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll_BFu7i) C1{ Fi:7 Fc:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll_BFu7i, BFu7i_BFs7c_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll_BFu7ll) C1{ Fi:7 Fc:7 FL:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll_BFu7ll, BFu7i_BFs7c_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7ll_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7ll_BFu7s) C1{ Fi:7 Fc:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, 1, "BFu7i_BFs7c_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7ll_BFu7s, BFu7i_BFs7c_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s) C1{ Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s, BFu7i_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7s_BFs7c  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s_BFs7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s_BFs7c, BFu7i_BFs7c_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7s_BFs7i  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s_BFs7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s_BFs7i, BFu7i_BFs7c_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7s_BFs7ll  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s_BFs7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s_BFs7ll, BFu7i_BFs7c_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7s_BFs7s  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s_BFs7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s_BFs7s, BFu7i_BFs7c_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7c_BFu7s_BFu7c  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s_BFu7c) C1{ Fi:7 Fc:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7c_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s_BFu7c, BFu7i_BFs7c_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7c_BFu7s_BFu7i  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s_BFu7i) C1{ Fi:7 Fc:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7c_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s_BFu7i, BFu7i_BFs7c_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7c_BFu7s_BFu7ll  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s_BFu7ll) C1{ Fi:7 Fc:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7c_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7c_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7c_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s_BFu7ll, BFu7i_BFs7c_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7c_BFu7s_BFu7s  {
  unsigned int v1:7;
  signed char v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7c_BFu7s_BFu7s) C1{ Fi:7 Fc:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7c_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7c_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7c_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7c_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7c_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 1, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7c_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7c_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7c_BFu7s_BFu7s, BFu7i_BFs7c_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
};
//SIG(1 BFu7i_BFs7i) C1{ Fi:7 Fi:7}



static void Test_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i, BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c) C1{ Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c, BFu7i_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7c_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c_BFs7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c_BFs7c, BFu7i_BFs7i_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7c_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c_BFs7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c_BFs7i, BFu7i_BFs7i_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7c_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c_BFs7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c_BFs7ll, BFu7i_BFs7i_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7c_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c_BFs7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c_BFs7s, BFu7i_BFs7i_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFs7c_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c_BFu7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c_BFu7c, BFu7i_BFs7i_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7c_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c_BFu7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c_BFu7i, BFu7i_BFs7i_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7c_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c_BFu7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c_BFu7ll, BFu7i_BFs7i_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7c_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7c_BFu7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7c_BFu7s, BFu7i_BFs7i_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7i_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i, BFu7i_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7i_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i_BFs7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i_BFs7c, BFu7i_BFs7i_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7i_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i_BFs7i, BFu7i_BFs7i_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7i_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i_BFs7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i_BFs7ll, BFu7i_BFs7i_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7i_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i_BFs7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i_BFs7s, BFu7i_BFs7i_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFs7i_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i_BFu7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i_BFu7c, BFu7i_BFs7i_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7i_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i_BFu7i, BFu7i_BFs7i_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7i_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i_BFu7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i_BFu7ll, BFu7i_BFs7i_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7i_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7i_BFu7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7i_BFu7s, BFu7i_BFs7i_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll) C1{ Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll, BFu7i_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll_BFs7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll_BFs7c, BFu7i_BFs7i_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll_BFs7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll_BFs7i, BFu7i_BFs7i_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll_BFs7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll_BFs7ll, BFu7i_BFs7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll_BFs7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll_BFs7s, BFu7i_BFs7i_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll_BFu7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll_BFu7c, BFu7i_BFs7i_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll_BFu7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll_BFu7i, BFu7i_BFs7i_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll_BFu7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll_BFu7ll, BFu7i_BFs7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7ll_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7ll_BFu7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7ll_BFu7s, BFu7i_BFs7i_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7i_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s) C1{ Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s, BFu7i_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFs7s_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s_BFs7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s_BFs7c, BFu7i_BFs7i_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7s_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s_BFs7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s_BFs7i, BFu7i_BFs7i_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7s_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s_BFs7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s_BFs7ll, BFu7i_BFs7i_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7s_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s_BFs7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s_BFs7s, BFu7i_BFs7i_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFs7s_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s_BFu7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s_BFu7c, BFu7i_BFs7i_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFs7s_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s_BFu7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s_BFu7i, BFu7i_BFs7i_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFs7s_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s_BFu7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s_BFu7ll, BFu7i_BFs7i_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFs7s_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFs7s_BFu7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFs7s_BFu7s, BFu7i_BFs7i_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c) C1{ Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c, BFu7i_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7c_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c_BFs7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c_BFs7c, BFu7i_BFs7i_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7c_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c_BFs7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c_BFs7i, BFu7i_BFs7i_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7c_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c_BFs7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c_BFs7ll, BFu7i_BFs7i_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7c_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c_BFs7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c_BFs7s, BFu7i_BFs7i_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7c_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c_BFu7c) C1{ Fi:7 Fi:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c_BFu7c, BFu7i_BFs7i_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7c_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c_BFu7i) C1{ Fi:7 Fi:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c_BFu7i, BFu7i_BFs7i_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7c_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c_BFu7ll) C1{ Fi:7 Fi:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c_BFu7ll, BFu7i_BFs7i_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7c_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7c_BFu7s) C1{ Fi:7 Fi:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7c_BFu7s, BFu7i_BFs7i_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i, BFu7i_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7i_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i_BFs7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i_BFs7c, BFu7i_BFs7i_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7i_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i_BFs7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i_BFs7i, BFu7i_BFs7i_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7i_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i_BFs7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i_BFs7ll, BFu7i_BFs7i_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7i_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i_BFs7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i_BFs7s, BFu7i_BFs7i_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7i_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i_BFu7c) C1{ Fi:7 Fi:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i_BFu7c, BFu7i_BFs7i_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7i_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i_BFu7i) C1{ Fi:7 Fi:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i_BFu7i, BFu7i_BFs7i_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7i_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i_BFu7ll) C1{ Fi:7 Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i_BFu7ll, BFu7i_BFs7i_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7i_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7i_BFu7s) C1{ Fi:7 Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7i_BFu7s, BFu7i_BFs7i_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll) C1{ Fi:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll, BFu7i_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll_BFs7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll_BFs7c, BFu7i_BFs7i_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll_BFs7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll_BFs7i, BFu7i_BFs7i_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll_BFs7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll_BFs7ll, BFu7i_BFs7i_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll_BFs7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll_BFs7s, BFu7i_BFs7i_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll_BFu7c) C1{ Fi:7 Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll_BFu7c, BFu7i_BFs7i_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll_BFu7i) C1{ Fi:7 Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll_BFu7i, BFu7i_BFs7i_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll_BFu7ll) C1{ Fi:7 Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll_BFu7ll, BFu7i_BFs7i_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7ll_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7ll_BFu7s) C1{ Fi:7 Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7i_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7ll_BFu7s, BFu7i_BFs7i_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s) C1{ Fi:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s, BFu7i_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7s_BFs7c  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s_BFs7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s_BFs7c, BFu7i_BFs7i_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7s_BFs7i  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s_BFs7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s_BFs7i, BFu7i_BFs7i_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7s_BFs7ll  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s_BFs7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s_BFs7ll, BFu7i_BFs7i_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7s_BFs7s  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s_BFs7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s_BFs7s, BFu7i_BFs7i_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7i_BFu7s_BFu7c  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s_BFu7c) C1{ Fi:7 Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7i_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s_BFu7c, BFu7i_BFs7i_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7i_BFu7s_BFu7i  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s_BFu7i) C1{ Fi:7 Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7i_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s_BFu7i, BFu7i_BFs7i_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7i_BFu7s_BFu7ll  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s_BFu7ll) C1{ Fi:7 Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7i_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7i_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7i_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s_BFu7ll, BFu7i_BFs7i_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7i_BFu7s_BFu7s  {
  unsigned int v1:7;
  signed int v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7i_BFu7s_BFu7s) C1{ Fi:7 Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7i_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7i_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7i_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7i_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7i_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7i_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7i_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7i_BFu7s_BFu7s, BFu7i_BFs7i_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
};
//SIG(1 BFu7i_BFs7ll) C1{ Fi:7 FL:7}



static void Test_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll, BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c) C1{ Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c, BFu7i_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c_BFs7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c_BFs7c, BFu7i_BFs7ll_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c_BFs7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c_BFs7i, BFu7i_BFs7ll_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c_BFs7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c_BFs7ll, BFu7i_BFs7ll_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c_BFs7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c_BFs7s, BFu7i_BFs7ll_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c_BFu7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c_BFu7c, BFu7i_BFs7ll_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c_BFu7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c_BFu7i, BFu7i_BFs7ll_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c_BFu7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c_BFu7ll, BFu7i_BFs7ll_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7c_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7c_BFu7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7c_BFu7s, BFu7i_BFs7ll_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i) C1{ Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i, BFu7i_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i_BFs7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i_BFs7c, BFu7i_BFs7ll_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i_BFs7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i_BFs7i, BFu7i_BFs7ll_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i_BFs7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i_BFs7ll, BFu7i_BFs7ll_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i_BFs7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i_BFs7s, BFu7i_BFs7ll_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i_BFu7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i_BFu7c, BFu7i_BFs7ll_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i_BFu7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i_BFu7i, BFu7i_BFs7ll_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i_BFu7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i_BFu7ll, BFu7i_BFs7ll_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7i_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7i_BFu7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7i_BFu7s, BFu7i_BFs7ll_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll, BFu7i_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll_BFs7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll_BFs7c, BFu7i_BFs7ll_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll_BFs7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll_BFs7i, BFu7i_BFs7ll_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll_BFs7ll, BFu7i_BFs7ll_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll_BFs7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll_BFs7s, BFu7i_BFs7ll_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll_BFu7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll_BFu7c, BFu7i_BFs7ll_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll_BFu7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll_BFu7i, BFu7i_BFs7ll_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll_BFu7ll, BFu7i_BFs7ll_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7ll_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7ll_BFu7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7ll_BFu7s, BFu7i_BFs7ll_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s) C1{ Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s, BFu7i_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s_BFs7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s_BFs7c, BFu7i_BFs7ll_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s_BFs7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s_BFs7i, BFu7i_BFs7ll_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s_BFs7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s_BFs7ll, BFu7i_BFs7ll_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s_BFs7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s_BFs7s, BFu7i_BFs7ll_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s_BFu7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s_BFu7c, BFu7i_BFs7ll_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s_BFu7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s_BFu7i, BFu7i_BFs7ll_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s_BFu7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7ll_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s_BFu7ll, BFu7i_BFs7ll_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFs7s_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFs7s_BFu7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFs7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFs7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFs7s_BFu7s, BFu7i_BFs7ll_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c) C1{ Fi:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c, BFu7i_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c_BFs7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c_BFs7c, BFu7i_BFs7ll_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c_BFs7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c_BFs7i, BFu7i_BFs7ll_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c_BFs7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c_BFs7ll, BFu7i_BFs7ll_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c_BFs7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c_BFs7s, BFu7i_BFs7ll_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c_BFu7c) C1{ Fi:7 FL:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c_BFu7c, BFu7i_BFs7ll_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c_BFu7i) C1{ Fi:7 FL:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c_BFu7i, BFu7i_BFs7ll_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c_BFu7ll) C1{ Fi:7 FL:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c_BFu7ll, BFu7i_BFs7ll_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7c_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7c_BFu7s) C1{ Fi:7 FL:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7c_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7c_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7c_BFu7s, BFu7i_BFs7ll_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i) C1{ Fi:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i, BFu7i_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i_BFs7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i_BFs7c, BFu7i_BFs7ll_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i_BFs7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i_BFs7i, BFu7i_BFs7ll_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i_BFs7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i_BFs7ll, BFu7i_BFs7ll_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i_BFs7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i_BFs7s, BFu7i_BFs7ll_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i_BFu7c) C1{ Fi:7 FL:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i_BFu7c, BFu7i_BFs7ll_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i_BFu7i) C1{ Fi:7 FL:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i_BFu7i, BFu7i_BFs7ll_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i_BFu7ll) C1{ Fi:7 FL:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i_BFu7ll, BFu7i_BFs7ll_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7i_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7i_BFu7s) C1{ Fi:7 FL:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7i_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7i_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7i_BFu7s, BFu7i_BFs7ll_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll, BFu7i_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll_BFs7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll_BFs7c, BFu7i_BFs7ll_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll_BFs7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll_BFs7i, BFu7i_BFs7ll_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll_BFs7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll_BFs7ll, BFu7i_BFs7ll_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll_BFs7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll_BFs7s, BFu7i_BFs7ll_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll_BFu7c) C1{ Fi:7 FL:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll_BFu7c, BFu7i_BFs7ll_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll_BFu7i) C1{ Fi:7 FL:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll_BFu7i, BFu7i_BFs7ll_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll_BFu7ll) C1{ Fi:7 FL:7 FL:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll_BFu7ll, BFu7i_BFs7ll_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7ll_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7ll_BFu7s) C1{ Fi:7 FL:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7ll_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7ll_BFu7s, BFu7i_BFs7ll_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s) C1{ Fi:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s, BFu7i_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s_BFs7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s_BFs7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s_BFs7c, BFu7i_BFs7ll_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s_BFs7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s_BFs7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s_BFs7i, BFu7i_BFs7ll_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s_BFs7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s_BFs7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s_BFs7ll, BFu7i_BFs7ll_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s_BFs7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s_BFs7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s_BFs7s, BFu7i_BFs7ll_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s_BFu7c  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s_BFu7c) C1{ Fi:7 FL:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7ll_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s_BFu7c, BFu7i_BFs7ll_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s_BFu7i  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s_BFu7i) C1{ Fi:7 FL:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7ll_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s_BFu7i, BFu7i_BFs7ll_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s_BFu7ll  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s_BFu7ll) C1{ Fi:7 FL:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7ll_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s_BFu7ll, BFu7i_BFs7ll_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7ll_BFu7s_BFu7s  {
  unsigned int v1:7;
  signed __tsi64 v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7ll_BFu7s_BFu7s) C1{ Fi:7 FL:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7ll_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7ll_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7ll_BFu7s_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7ll_BFu7s_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7ll_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7ll_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7ll_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7ll_BFu7s_BFu7s, BFu7i_BFs7ll_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
};
//SIG(1 BFu7i_BFs7s) C1{ Fi:7 Fs:7}



static void Test_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s, BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c) C1{ Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c, BFu7i_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7c_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c_BFs7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c_BFs7c, BFu7i_BFs7s_BFs7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7c_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c_BFs7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c_BFs7i, BFu7i_BFs7s_BFs7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7c_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c_BFs7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c_BFs7ll, BFu7i_BFs7s_BFs7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7c_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c_BFs7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c_BFs7s, BFu7i_BFs7s_BFs7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7c_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c_BFu7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c_BFu7c, BFu7i_BFs7s_BFs7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7c_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c_BFu7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c_BFu7i, BFu7i_BFs7s_BFs7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7c_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c_BFu7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c_BFu7ll, BFu7i_BFs7s_BFs7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7c_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7c_BFu7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7c_BFu7s, BFu7i_BFs7s_BFs7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i) C1{ Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i, BFu7i_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7i_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i_BFs7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i_BFs7c, BFu7i_BFs7s_BFs7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7i_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i_BFs7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i_BFs7i, BFu7i_BFs7s_BFs7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7i_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i_BFs7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i_BFs7ll, BFu7i_BFs7s_BFs7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7i_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i_BFs7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i_BFs7s, BFu7i_BFs7s_BFs7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7i_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i_BFu7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i_BFu7c, BFu7i_BFs7s_BFs7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7i_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i_BFu7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i_BFu7i, BFu7i_BFs7s_BFs7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7i_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i_BFu7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i_BFu7ll, BFu7i_BFs7s_BFs7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7i_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7i_BFu7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7i_BFu7s, BFu7i_BFs7s_BFs7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll) C1{ Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll, BFu7i_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll_BFs7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll_BFs7c, BFu7i_BFs7s_BFs7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll_BFs7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll_BFs7i, BFu7i_BFs7s_BFs7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll_BFs7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll_BFs7ll, BFu7i_BFs7s_BFs7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll_BFs7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll_BFs7s, BFu7i_BFs7s_BFs7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll_BFu7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll_BFu7c, BFu7i_BFs7s_BFs7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll_BFu7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll_BFu7i, BFu7i_BFs7s_BFs7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll_BFu7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll_BFu7ll, BFu7i_BFs7s_BFs7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7ll_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed __tsi64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7ll_BFu7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFs7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7ll_BFu7s, BFu7i_BFs7s_BFs7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s, BFu7i_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7s_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s_BFs7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s_BFs7c, BFu7i_BFs7s_BFs7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7s_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s_BFs7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s_BFs7i, BFu7i_BFs7s_BFs7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7s_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s_BFs7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s_BFs7ll, BFu7i_BFs7s_BFs7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7s_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s_BFs7s, BFu7i_BFs7s_BFs7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFs7s_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s_BFu7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7s_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s_BFu7c, BFu7i_BFs7s_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFs7s_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s_BFu7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7s_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s_BFu7i, BFu7i_BFs7s_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFs7s_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s_BFu7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7s_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s_BFu7ll, BFu7i_BFs7s_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFs7s_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  signed short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFs7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7s_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFs7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFs7s_BFu7s, BFu7i_BFs7s_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c) C1{ Fi:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c, BFu7i_BFs7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7c_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c_BFs7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7c_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7c_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7c_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c_BFs7c, BFu7i_BFs7s_BFu7c_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7c_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c_BFs7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7c_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7c_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7c_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c_BFs7i, BFu7i_BFs7s_BFu7c_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7c_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c_BFs7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7c_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7c_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7c_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c_BFs7ll, BFu7i_BFs7s_BFu7c_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7c_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c_BFs7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7c_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7c_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7c_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c_BFs7s, BFu7i_BFs7s_BFu7c_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7c_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c_BFu7c) C1{ Fi:7 Fs:7 Fc:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c_BFu7c, BFu7i_BFs7s_BFu7c_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7c_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c_BFu7i) C1{ Fi:7 Fs:7 Fc:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c_BFu7i, BFu7i_BFs7s_BFu7c_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7c_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c_BFu7ll) C1{ Fi:7 Fs:7 Fc:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c_BFu7ll, BFu7i_BFs7s_BFu7c_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7c_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned char v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7c_BFu7s) C1{ Fi:7 Fs:7 Fc:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7c_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7c_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7c_BFu7s, BFu7i_BFs7s_BFu7c_BFu7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i) C1{ Fi:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i, BFu7i_BFs7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7i_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i_BFs7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7i_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7i_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7i_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i_BFs7c, BFu7i_BFs7s_BFu7i_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7i_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i_BFs7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7i_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7i_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7i_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i_BFs7i, BFu7i_BFs7s_BFu7i_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7i_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i_BFs7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7i_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7i_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7i_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i_BFs7ll, BFu7i_BFs7s_BFu7i_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7i_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i_BFs7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7i_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7i_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7i_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7i_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i_BFs7s, BFu7i_BFs7s_BFu7i_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7i_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i_BFu7c) C1{ Fi:7 Fs:7 Fi:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i_BFu7c, BFu7i_BFs7s_BFu7i_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7i_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i_BFu7i) C1{ Fi:7 Fs:7 Fi:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i_BFu7i, BFu7i_BFs7s_BFu7i_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7i_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i_BFu7ll) C1{ Fi:7 Fs:7 Fi:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i_BFu7ll, BFu7i_BFs7s_BFu7i_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7i_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned int v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7i_BFu7s) C1{ Fi:7 Fs:7 Fi:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7i_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7i_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7i_BFu7s, BFu7i_BFs7s_BFu7i_BFu7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll) C1{ Fi:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll, BFu7i_BFs7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll_BFs7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7ll_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll_BFs7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll_BFs7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll_BFs7c, BFu7i_BFs7s_BFu7ll_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll_BFs7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7ll_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll_BFs7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll_BFs7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll_BFs7i, BFu7i_BFs7s_BFu7ll_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll_BFs7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7ll_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll_BFs7ll, BFu7i_BFs7s_BFu7ll_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll_BFs7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7ll_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll_BFs7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll_BFs7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7ll_BFs7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll_BFs7s, BFu7i_BFs7s_BFu7ll_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll_BFu7c) C1{ Fi:7 Fs:7 FL:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll_BFu7c, BFu7i_BFs7s_BFu7ll_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll_BFu7i) C1{ Fi:7 Fs:7 FL:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7i");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll_BFu7i, BFu7i_BFs7s_BFu7ll_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll_BFu7ll) C1{ Fi:7 Fs:7 FL:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7ll");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll_BFu7ll, BFu7i_BFs7s_BFu7ll_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7ll_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  __tsu64 v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7ll_BFu7s) C1{ Fi:7 Fs:7 FL:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 6, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, 1, "BFu7i_BFs7s_BFu7ll_BFu7s");
    set_bf_and_test(lv, v4, 2, 5, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7ll_BFu7s, BFu7i_BFs7s_BFu7ll_BFu7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s, BFu7i_BFs7s_BFu7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7s_BFs7c  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s_BFs7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7s_BFs7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s_BFs7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s_BFs7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7s_BFs7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7s_BFs7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s_BFs7c, BFu7i_BFs7s_BFu7s_BFs7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7s_BFs7i  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s_BFs7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7s_BFs7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s_BFs7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s_BFs7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7s_BFs7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7s_BFs7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s_BFs7i, BFu7i_BFs7s_BFu7s_BFs7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7s_BFs7ll  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed __tsi64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s_BFs7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7s_BFs7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s_BFs7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s_BFs7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7s_BFs7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7s_BFs7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s_BFs7ll, BFu7i_BFs7s_BFu7s_BFs7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7s_BFs7s  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  signed short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s_BFs7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7s_BFs7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s_BFs7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s_BFs7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7s_BFs7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7s_BFs7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFs7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFs7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s_BFs7s, BFu7i_BFs7s_BFu7s_BFs7s)
//============================================================================


struct  BFu7i_BFs7s_BFu7s_BFu7c  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned char v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s_BFu7c) C1{ Fi:7 Fs:7 Fs:7 Fc:7}



static void Test_BFu7i_BFs7s_BFu7s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s_BFu7c");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7c");
    set_bf_and_test(lv, v4, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s_BFu7c, BFu7i_BFs7s_BFu7s_BFu7c)
//============================================================================


struct  BFu7i_BFs7s_BFu7s_BFu7i  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned int v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s_BFu7i) C1{ Fi:7 Fs:7 Fs:7 Fi:7}



static void Test_BFu7i_BFs7s_BFu7s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s_BFu7i");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7i");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s_BFu7i, BFu7i_BFs7s_BFu7s_BFu7i)
//============================================================================


struct  BFu7i_BFs7s_BFu7s_BFu7ll  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  __tsu64 v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s_BFu7ll) C1{ Fi:7 Fs:7 Fs:7 FL:7}



static void Test_BFu7i_BFs7s_BFu7s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFs7s_BFu7s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFs7s_BFu7s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7ll");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s_BFu7ll, BFu7i_BFs7s_BFu7s_BFu7ll)
//============================================================================


struct  BFu7i_BFs7s_BFu7s_BFu7s  {
  unsigned int v1:7;
  signed short v2:7;
  unsigned short v3:7;
  unsigned short v4:7;
};
//SIG(1 BFu7i_BFs7s_BFu7s_BFu7s) C1{ Fi:7 Fs:7 Fs:7 Fs:7}



static void Test_BFu7i_BFs7s_BFu7s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFs7s_BFu7s_BFu7s");
    static STRUCT_IF_C BFu7i_BFs7s_BFu7s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFs7s_BFu7s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFs7s_BFu7s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 7, hide_sll(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v3, 2, 0, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, 1, "BFu7i_BFs7s_BFu7s_BFu7s");
    set_bf_and_test(lv, v4, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFs7s_BFu7s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFs7s_BFu7s_BFu7s, BFu7i_BFs7s_BFu7s_BFu7s)
//============================================================================


struct  BFu7i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:15;
};
//SIG(1 BFu7i_BFu15i) C1{ Fi:7 Fi:15}



static void Test_BFu7i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i, BFu7i_BFu15i)
//============================================================================


struct  BFu7i_BFu15i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu15i_BFu15i) C1{ Fi:7 Fi:15 Fi:15}



static void Test_BFu7i_BFu15i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu15i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu15i, BFu7i_BFu15i_BFu15i)
//============================================================================


struct  BFu7i_BFu15i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu15i_BFu15ll) C1{ Fi:7 Fi:15 FL:15}



static void Test_BFu7i_BFu15i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, 1, "BFu7i_BFu15i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu15ll, BFu7i_BFu15i_BFu15ll)
//============================================================================


struct  BFu7i_BFu15i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu15i_BFu15s) C1{ Fi:7 Fi:15 Fs:15}



static void Test_BFu7i_BFu15i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu15i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu15i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu15s, BFu7i_BFu15i_BFu15s)
//============================================================================


struct  BFu7i_BFu15i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu15i_BFu16i) C1{ Fi:7 Fi:15 Fi:16}



static void Test_BFu7i_BFu15i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu15i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu15i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu16i, BFu7i_BFu15i_BFu16i)
//============================================================================


struct  BFu7i_BFu15i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu15i_BFu16ll) C1{ Fi:7 Fi:15 FL:16}



static void Test_BFu7i_BFu15i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu7i_BFu15i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu15i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu16ll, BFu7i_BFu15i_BFu16ll)
//============================================================================


struct  BFu7i_BFu15i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu15i_BFu16s) C1{ Fi:7 Fi:15 Fs:16}



static void Test_BFu7i_BFu15i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu15i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu15i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu15i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu16s, BFu7i_BFu15i_BFu16s)
//============================================================================


struct  BFu7i_BFu15i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu15i_BFu17i) C1{ Fi:7 Fi:15 Fi:17}



static void Test_BFu7i_BFu15i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu15i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu15i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu17i, BFu7i_BFu15i_BFu17i)
//============================================================================


struct  BFu7i_BFu15i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu15i_BFu17ll) C1{ Fi:7 Fi:15 FL:17}



static void Test_BFu7i_BFu15i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu7i_BFu15i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu15i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu17ll, BFu7i_BFu15i_BFu17ll)
//============================================================================


struct  BFu7i_BFu15i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu15i_BFu1c) C1{ Fi:7 Fi:15 Fc:1}



static void Test_BFu7i_BFu15i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu15i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7i_BFu15i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu1c, BFu7i_BFu15i_BFu1c)
//============================================================================


struct  BFu7i_BFu15i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu15i_BFu1i) C1{ Fi:7 Fi:15 Fi:1}



static void Test_BFu7i_BFu15i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7i_BFu15i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu1i, BFu7i_BFu15i_BFu1i)
//============================================================================


struct  BFu7i_BFu15i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu15i_BFu1ll) C1{ Fi:7 Fi:15 FL:1}



static void Test_BFu7i_BFu15i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7i_BFu15i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu1ll, BFu7i_BFu15i_BFu1ll)
//============================================================================


struct  BFu7i_BFu15i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu15i_BFu1s) C1{ Fi:7 Fi:15 Fs:1}



static void Test_BFu7i_BFu15i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu15i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7i_BFu15i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu1s, BFu7i_BFu15i_BFu1s)
//============================================================================


struct  BFu7i_BFu15i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu15i_BFu31i) C1{ Fi:7 Fi:15 Fi:31}



static void Test_BFu7i_BFu15i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu15i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu15i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu31i, BFu7i_BFu15i_BFu31i)
//============================================================================


struct  BFu7i_BFu15i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu15i_BFu31ll) C1{ Fi:7 Fi:15 FL:31}



static void Test_BFu7i_BFu15i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu7i_BFu15i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu7i_BFu15i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu31ll, BFu7i_BFu15i_BFu31ll)
//============================================================================


struct  BFu7i_BFu15i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu15i_BFu32i) C1{ Fi:7 Fi:15 Fi:32}



static void Test_BFu7i_BFu15i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu15i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu15i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu32i, BFu7i_BFu15i_BFu32i)
//============================================================================


struct  BFu7i_BFu15i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu15i_BFu32ll) C1{ Fi:7 Fi:15 FL:32}



static void Test_BFu7i_BFu15i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu7i_BFu15i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu7i_BFu15i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu32ll, BFu7i_BFu15i_BFu32ll)
//============================================================================


struct  BFu7i_BFu15i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu15i_BFu33) C1{ Fi:7 Fi:15 FL:33}



static void Test_BFu7i_BFu15i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu33");
    static STRUCT_IF_C BFu7i_BFu15i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu7i_BFu15i_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu7i_BFu15i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu33, BFu7i_BFu15i_BFu33)
//============================================================================


struct  BFu7i_BFu15i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu15i_BFu7c) C1{ Fi:7 Fi:15 Fc:7}



static void Test_BFu7i_BFu15i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu15i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu15i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu7c, BFu7i_BFu15i_BFu7c)
//============================================================================


struct  BFu7i_BFu15i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu15i_BFu7i) C1{ Fi:7 Fi:15 Fi:7}



static void Test_BFu7i_BFu15i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7i_BFu15i_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu7i, BFu7i_BFu15i_BFu7i)
//============================================================================


struct  BFu7i_BFu15i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu15i_BFu7ll) C1{ Fi:7 Fi:15 FL:7}



static void Test_BFu7i_BFu15i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7i_BFu15i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu7ll, BFu7i_BFu15i_BFu7ll)
//============================================================================


struct  BFu7i_BFu15i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu15i_BFu7s) C1{ Fi:7 Fi:15 Fs:7}



static void Test_BFu7i_BFu15i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu15i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7i_BFu15i_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu7s, BFu7i_BFu15i_BFu7s)
//============================================================================


struct  BFu7i_BFu15i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu15i_BFu8c) C1{ Fi:7 Fi:15 Fc:8}



static void Test_BFu7i_BFu15i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu15i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu15i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu15i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu8c, BFu7i_BFu15i_BFu8c)
//============================================================================


struct  BFu7i_BFu15i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu15i_BFu8i) C1{ Fi:7 Fi:15 Fi:8}



static void Test_BFu7i_BFu15i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7i_BFu15i_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu15i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu8i, BFu7i_BFu15i_BFu8i)
//============================================================================


struct  BFu7i_BFu15i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu15i_BFu8ll) C1{ Fi:7 Fi:15 FL:8}



static void Test_BFu7i_BFu15i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7i_BFu15i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu15i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu8ll, BFu7i_BFu15i_BFu8ll)
//============================================================================


struct  BFu7i_BFu15i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu15i_BFu8s) C1{ Fi:7 Fi:15 Fs:8}



static void Test_BFu7i_BFu15i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu15i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7i_BFu15i_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu15i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu8s, BFu7i_BFu15i_BFu8s)
//============================================================================


struct  BFu7i_BFu15i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu15i_BFu9i) C1{ Fi:7 Fi:15 Fi:9}



static void Test_BFu7i_BFu15i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu15i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7i_BFu15i_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu15i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu9i, BFu7i_BFu15i_BFu9i)
//============================================================================


struct  BFu7i_BFu15i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu15i_BFu9ll) C1{ Fi:7 Fi:15 FL:9}



static void Test_BFu7i_BFu15i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu15i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7i_BFu15i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu15i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu9ll, BFu7i_BFu15i_BFu9ll)
//============================================================================


struct  BFu7i_BFu15i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu15i_BFu9s) C1{ Fi:7 Fi:15 Fs:9}



static void Test_BFu7i_BFu15i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu15i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu15i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7i_BFu15i_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu15i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_BFu9s, BFu7i_BFu15i_BFu9s)
//============================================================================


struct  BFu7i_BFu15i_C  {
  unsigned int v1:7;
  unsigned int v2:15;
  char v3;
};
//SIG(1 BFu7i_BFu15i_C) C1{ Fi:7 Fi:15 Fc}



static void Test_BFu7i_BFu15i_C()
{
  {
    init_simple_test("BFu7i_BFu15i_C");
    static STRUCT_IF_C BFu7i_BFu15i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_C");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_C");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_C");
    check_field_offset(lv, v3, 3, "BFu7i_BFu15i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_C, BFu7i_BFu15i_C)
//============================================================================


struct  BFu7i_BFu15i_D  {
  unsigned int v1:7;
  unsigned int v2:15;
  double v3;
};
//SIG(1 BFu7i_BFu15i_D) C1{ Fi:7 Fi:15 FL}



static void Test_BFu7i_BFu15i_D()
{
  {
    init_simple_test("BFu7i_BFu15i_D");
    static STRUCT_IF_C BFu7i_BFu15i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_D");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_D");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_D, BFu7i_BFu15i_D)
//============================================================================


struct  BFu7i_BFu15i_F  {
  unsigned int v1:7;
  unsigned int v2:15;
  float v3;
};
//SIG(1 BFu7i_BFu15i_F) C1{ Fi:7 Fi:15 Fi}



static void Test_BFu7i_BFu15i_F()
{
  {
    init_simple_test("BFu7i_BFu15i_F");
    static STRUCT_IF_C BFu7i_BFu15i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_F");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_F");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_F, BFu7i_BFu15i_F)
//============================================================================


struct  BFu7i_BFu15i_I  {
  unsigned int v1:7;
  unsigned int v2:15;
  int v3;
};
//SIG(1 BFu7i_BFu15i_I) C1{ Fi:7 Fi:15 Fi}



static void Test_BFu7i_BFu15i_I()
{
  {
    init_simple_test("BFu7i_BFu15i_I");
    static STRUCT_IF_C BFu7i_BFu15i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_I");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_I");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_I, BFu7i_BFu15i_I)
//============================================================================


struct  BFu7i_BFu15i_Ip  {
  unsigned int v1:7;
  unsigned int v2:15;
  int *v3;
};
//SIG(1 BFu7i_BFu15i_Ip) C1{ Fi:7 Fi:15 Fp}



static void Test_BFu7i_BFu15i_Ip()
{
  {
    init_simple_test("BFu7i_BFu15i_Ip");
    static STRUCT_IF_C BFu7i_BFu15i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu15i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_Ip, BFu7i_BFu15i_Ip)
//============================================================================


struct  BFu7i_BFu15i_L  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu15i_L) C1{ Fi:7 Fi:15 FL}



static void Test_BFu7i_BFu15i_L()
{
  {
    init_simple_test("BFu7i_BFu15i_L");
    static STRUCT_IF_C BFu7i_BFu15i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_L");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_L");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_L, BFu7i_BFu15i_L)
//============================================================================


struct  BFu7i_BFu15i_S  {
  unsigned int v1:7;
  unsigned int v2:15;
  short v3;
};
//SIG(1 BFu7i_BFu15i_S) C1{ Fi:7 Fi:15 Fs}



static void Test_BFu7i_BFu15i_S()
{
  {
    init_simple_test("BFu7i_BFu15i_S");
    static STRUCT_IF_C BFu7i_BFu15i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_S");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_S");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_S");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_S, BFu7i_BFu15i_S)
//============================================================================


struct  BFu7i_BFu15i_Uc  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu15i_Uc) C1{ Fi:7 Fi:15 Fc}



static void Test_BFu7i_BFu15i_Uc()
{
  {
    init_simple_test("BFu7i_BFu15i_Uc");
    static STRUCT_IF_C BFu7i_BFu15i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_Uc");
    check_field_offset(lv, v3, 3, "BFu7i_BFu15i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_Uc, BFu7i_BFu15i_Uc)
//============================================================================


struct  BFu7i_BFu15i_Ui  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu15i_Ui) C1{ Fi:7 Fi:15 Fi}



static void Test_BFu7i_BFu15i_Ui()
{
  {
    init_simple_test("BFu7i_BFu15i_Ui");
    static STRUCT_IF_C BFu7i_BFu15i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_Ui, BFu7i_BFu15i_Ui)
//============================================================================


struct  BFu7i_BFu15i_Ul  {
  unsigned int v1:7;
  unsigned int v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu15i_Ul) C1{ Fi:7 Fi:15 FL}



static void Test_BFu7i_BFu15i_Ul()
{
  {
    init_simple_test("BFu7i_BFu15i_Ul");
    static STRUCT_IF_C BFu7i_BFu15i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_Ul, BFu7i_BFu15i_Ul)
//============================================================================


struct  BFu7i_BFu15i_Us  {
  unsigned int v1:7;
  unsigned int v2:15;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu15i_Us) C1{ Fi:7 Fi:15 Fs}



static void Test_BFu7i_BFu15i_Us()
{
  {
    init_simple_test("BFu7i_BFu15i_Us");
    static STRUCT_IF_C BFu7i_BFu15i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_Us");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_Us, BFu7i_BFu15i_Us)
//============================================================================


struct  BFu7i_BFu15i_Vp  {
  unsigned int v1:7;
  unsigned int v2:15;
  void *v3;
};
//SIG(1 BFu7i_BFu15i_Vp) C1{ Fi:7 Fi:15 Fp}



static void Test_BFu7i_BFu15i_Vp()
{
  {
    init_simple_test("BFu7i_BFu15i_Vp");
    static STRUCT_IF_C BFu7i_BFu15i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu15i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15i_Vp, BFu7i_BFu15i_Vp)
//============================================================================


struct  BFu7i_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
};
//SIG(1 BFu7i_BFu15ll) C1{ Fi:7 FL:15}



static void Test_BFu7i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll, BFu7i_BFu15ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu15ll_BFu15i) C1{ Fi:7 FL:15 Fi:15}



static void Test_BFu7i_BFu15ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu15ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu15i, BFu7i_BFu15ll_BFu15i)
//============================================================================


struct  BFu7i_BFu15ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu15ll_BFu15ll) C1{ Fi:7 FL:15 FL:15}



static void Test_BFu7i_BFu15ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, 1, "BFu7i_BFu15ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 6, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu15ll, BFu7i_BFu15ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu15ll_BFu15s) C1{ Fi:7 FL:15 Fs:15}



static void Test_BFu7i_BFu15ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu15ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu15s, BFu7i_BFu15ll_BFu15s)
//============================================================================


struct  BFu7i_BFu15ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu15ll_BFu16i) C1{ Fi:7 FL:15 Fi:16}



static void Test_BFu7i_BFu15ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu15ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu15ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu16i, BFu7i_BFu15ll_BFu16i)
//============================================================================


struct  BFu7i_BFu15ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu15ll_BFu16ll) C1{ Fi:7 FL:15 FL:16}



static void Test_BFu7i_BFu15ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, 1, "BFu7i_BFu15ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 6, 16, hide_ull(1LL<<15), "BFu7i_BFu15ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu16ll, BFu7i_BFu15ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu15ll_BFu16s) C1{ Fi:7 FL:15 Fs:16}



static void Test_BFu7i_BFu15ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu15ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu15ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu16s, BFu7i_BFu15ll_BFu16s)
//============================================================================


struct  BFu7i_BFu15ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu15ll_BFu17i) C1{ Fi:7 FL:15 Fi:17}



static void Test_BFu7i_BFu15ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu15ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu15ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu17i, BFu7i_BFu15ll_BFu17i)
//============================================================================


struct  BFu7i_BFu15ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu15ll_BFu17ll) C1{ Fi:7 FL:15 FL:17}



static void Test_BFu7i_BFu15ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, 1, "BFu7i_BFu15ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 6, 17, hide_ull(1LL<<16), "BFu7i_BFu15ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu17ll, BFu7i_BFu15ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu15ll_BFu1c) C1{ Fi:7 FL:15 Fc:1}



static void Test_BFu7i_BFu15ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7i_BFu15ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu1c, BFu7i_BFu15ll_BFu1c)
//============================================================================


struct  BFu7i_BFu15ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu15ll_BFu1i) C1{ Fi:7 FL:15 Fi:1}



static void Test_BFu7i_BFu15ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7i_BFu15ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu1i, BFu7i_BFu15ll_BFu1i)
//============================================================================


struct  BFu7i_BFu15ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu15ll_BFu1ll) C1{ Fi:7 FL:15 FL:1}



static void Test_BFu7i_BFu15ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7i_BFu15ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu1ll, BFu7i_BFu15ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu15ll_BFu1s) C1{ Fi:7 FL:15 Fs:1}



static void Test_BFu7i_BFu15ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 6, 1, 1, "BFu7i_BFu15ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu1s, BFu7i_BFu15ll_BFu1s)
//============================================================================


struct  BFu7i_BFu15ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu15ll_BFu31i) C1{ Fi:7 FL:15 Fi:31}



static void Test_BFu7i_BFu15ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu15ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu15ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu31i, BFu7i_BFu15ll_BFu31i)
//============================================================================


struct  BFu7i_BFu15ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu15ll_BFu31ll) C1{ Fi:7 FL:15 FL:31}



static void Test_BFu7i_BFu15ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, 1, "BFu7i_BFu15ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 6, 31, hide_ull(1LL<<30), "BFu7i_BFu15ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu31ll, BFu7i_BFu15ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu15ll_BFu32i) C1{ Fi:7 FL:15 Fi:32}



static void Test_BFu7i_BFu15ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu15ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu15ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu32i, BFu7i_BFu15ll_BFu32i)
//============================================================================


struct  BFu7i_BFu15ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu15ll_BFu32ll) C1{ Fi:7 FL:15 FL:32}



static void Test_BFu7i_BFu15ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, 1, "BFu7i_BFu15ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 6, 32, hide_ull(1LL<<31), "BFu7i_BFu15ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu32ll, BFu7i_BFu15ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu15ll_BFu33) C1{ Fi:7 FL:15 FL:33}



static void Test_BFu7i_BFu15ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, 1, "BFu7i_BFu15ll_BFu33");
    set_bf_and_test(lv, v3, 2, 6, 33, hide_ull(1LL<<32), "BFu7i_BFu15ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu33, BFu7i_BFu15ll_BFu33)
//============================================================================


struct  BFu7i_BFu15ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu15ll_BFu7c) C1{ Fi:7 FL:15 Fc:7}



static void Test_BFu7i_BFu15ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu15ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu7c, BFu7i_BFu15ll_BFu7c)
//============================================================================


struct  BFu7i_BFu15ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu15ll_BFu7i) C1{ Fi:7 FL:15 Fi:7}



static void Test_BFu7i_BFu15ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7i_BFu15ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu7i, BFu7i_BFu15ll_BFu7i)
//============================================================================


struct  BFu7i_BFu15ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu15ll_BFu7ll) C1{ Fi:7 FL:15 FL:7}



static void Test_BFu7i_BFu15ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7i_BFu15ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu7ll, BFu7i_BFu15ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu15ll_BFu7s) C1{ Fi:7 FL:15 Fs:7}



static void Test_BFu7i_BFu15ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, 1, "BFu7i_BFu15ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 6, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu7s, BFu7i_BFu15ll_BFu7s)
//============================================================================


struct  BFu7i_BFu15ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu15ll_BFu8c) C1{ Fi:7 FL:15 Fc:8}



static void Test_BFu7i_BFu15ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu15ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu15ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu8c, BFu7i_BFu15ll_BFu8c)
//============================================================================


struct  BFu7i_BFu15ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu15ll_BFu8i) C1{ Fi:7 FL:15 Fi:8}



static void Test_BFu7i_BFu15ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7i_BFu15ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu15ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu8i, BFu7i_BFu15ll_BFu8i)
//============================================================================


struct  BFu7i_BFu15ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu15ll_BFu8ll) C1{ Fi:7 FL:15 FL:8}



static void Test_BFu7i_BFu15ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7i_BFu15ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu15ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu8ll, BFu7i_BFu15ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu15ll_BFu8s) C1{ Fi:7 FL:15 Fs:8}



static void Test_BFu7i_BFu15ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, 1, "BFu7i_BFu15ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 6, 8, hide_ull(1LL<<7), "BFu7i_BFu15ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu8s, BFu7i_BFu15ll_BFu8s)
//============================================================================


struct  BFu7i_BFu15ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu15ll_BFu9i) C1{ Fi:7 FL:15 Fi:9}



static void Test_BFu7i_BFu15ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7i_BFu15ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu15ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu9i, BFu7i_BFu15ll_BFu9i)
//============================================================================


struct  BFu7i_BFu15ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu15ll_BFu9ll) C1{ Fi:7 FL:15 FL:9}



static void Test_BFu7i_BFu15ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7i_BFu15ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu15ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu9ll, BFu7i_BFu15ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu15ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu15ll_BFu9s) C1{ Fi:7 FL:15 Fs:9}



static void Test_BFu7i_BFu15ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu15ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu15ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, 1, "BFu7i_BFu15ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 6, 9, hide_ull(1LL<<8), "BFu7i_BFu15ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_BFu9s, BFu7i_BFu15ll_BFu9s)
//============================================================================


struct  BFu7i_BFu15ll_C  {
  unsigned int v1:7;
  __tsu64 v2:15;
  char v3;
};
//SIG(1 BFu7i_BFu15ll_C) C1{ Fi:7 FL:15 Fc}



static void Test_BFu7i_BFu15ll_C()
{
  {
    init_simple_test("BFu7i_BFu15ll_C");
    static STRUCT_IF_C BFu7i_BFu15ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_C");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_C");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_C");
    check_field_offset(lv, v3, 3, "BFu7i_BFu15ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_C, BFu7i_BFu15ll_C)
//============================================================================


struct  BFu7i_BFu15ll_D  {
  unsigned int v1:7;
  __tsu64 v2:15;
  double v3;
};
//SIG(1 BFu7i_BFu15ll_D) C1{ Fi:7 FL:15 FL}



static void Test_BFu7i_BFu15ll_D()
{
  {
    init_simple_test("BFu7i_BFu15ll_D");
    static STRUCT_IF_C BFu7i_BFu15ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_D");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_D");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_D, BFu7i_BFu15ll_D)
//============================================================================


struct  BFu7i_BFu15ll_F  {
  unsigned int v1:7;
  __tsu64 v2:15;
  float v3;
};
//SIG(1 BFu7i_BFu15ll_F) C1{ Fi:7 FL:15 Fi}



static void Test_BFu7i_BFu15ll_F()
{
  {
    init_simple_test("BFu7i_BFu15ll_F");
    static STRUCT_IF_C BFu7i_BFu15ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_F");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_F");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_F, BFu7i_BFu15ll_F)
//============================================================================


struct  BFu7i_BFu15ll_I  {
  unsigned int v1:7;
  __tsu64 v2:15;
  int v3;
};
//SIG(1 BFu7i_BFu15ll_I) C1{ Fi:7 FL:15 Fi}



static void Test_BFu7i_BFu15ll_I()
{
  {
    init_simple_test("BFu7i_BFu15ll_I");
    static STRUCT_IF_C BFu7i_BFu15ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_I");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_I");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_I, BFu7i_BFu15ll_I)
//============================================================================


struct  BFu7i_BFu15ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:15;
  int *v3;
};
//SIG(1 BFu7i_BFu15ll_Ip) C1{ Fi:7 FL:15 Fp}



static void Test_BFu7i_BFu15ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu15ll_Ip");
    static STRUCT_IF_C BFu7i_BFu15ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu15ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_Ip, BFu7i_BFu15ll_Ip)
//============================================================================


struct  BFu7i_BFu15ll_L  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu15ll_L) C1{ Fi:7 FL:15 FL}



static void Test_BFu7i_BFu15ll_L()
{
  {
    init_simple_test("BFu7i_BFu15ll_L");
    static STRUCT_IF_C BFu7i_BFu15ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_L");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_L");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_L, BFu7i_BFu15ll_L)
//============================================================================


struct  BFu7i_BFu15ll_S  {
  unsigned int v1:7;
  __tsu64 v2:15;
  short v3;
};
//SIG(1 BFu7i_BFu15ll_S) C1{ Fi:7 FL:15 Fs}



static void Test_BFu7i_BFu15ll_S()
{
  {
    init_simple_test("BFu7i_BFu15ll_S");
    static STRUCT_IF_C BFu7i_BFu15ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_S");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_S");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_S");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_S, BFu7i_BFu15ll_S)
//============================================================================


struct  BFu7i_BFu15ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu15ll_Uc) C1{ Fi:7 FL:15 Fc}



static void Test_BFu7i_BFu15ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu15ll_Uc");
    static STRUCT_IF_C BFu7i_BFu15ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7i_BFu15ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_Uc, BFu7i_BFu15ll_Uc)
//============================================================================


struct  BFu7i_BFu15ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu15ll_Ui) C1{ Fi:7 FL:15 Fi}



static void Test_BFu7i_BFu15ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu15ll_Ui");
    static STRUCT_IF_C BFu7i_BFu15ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_Ui, BFu7i_BFu15ll_Ui)
//============================================================================


struct  BFu7i_BFu15ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu15ll_Ul) C1{ Fi:7 FL:15 FL}



static void Test_BFu7i_BFu15ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu15ll_Ul");
    static STRUCT_IF_C BFu7i_BFu15ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_Ul, BFu7i_BFu15ll_Ul)
//============================================================================


struct  BFu7i_BFu15ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:15;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu15ll_Us) C1{ Fi:7 FL:15 Fs}



static void Test_BFu7i_BFu15ll_Us()
{
  {
    init_simple_test("BFu7i_BFu15ll_Us");
    static STRUCT_IF_C BFu7i_BFu15ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_Us");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_Us, BFu7i_BFu15ll_Us)
//============================================================================


struct  BFu7i_BFu15ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:15;
  void *v3;
};
//SIG(1 BFu7i_BFu15ll_Vp) C1{ Fi:7 FL:15 Fp}



static void Test_BFu7i_BFu15ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu15ll_Vp");
    static STRUCT_IF_C BFu7i_BFu15ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu15ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, 1, "BFu7i_BFu15ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15ll_Vp, BFu7i_BFu15ll_Vp)
//============================================================================


struct  BFu7i_BFu15s  {
  unsigned int v1:7;
  unsigned short v2:15;
};
//SIG(1 BFu7i_BFu15s) C1{ Fi:7 Fs:15}



static void Test_BFu7i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s, BFu7i_BFu15s)
//============================================================================


struct  BFu7i_BFu15s_BFu15i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu15s_BFu15i) C1{ Fi:7 Fs:15 Fi:15}



static void Test_BFu7i_BFu15s_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu15i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu15s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu15i, BFu7i_BFu15s_BFu15i)
//============================================================================


struct  BFu7i_BFu15s_BFu15ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu15s_BFu15ll) C1{ Fi:7 Fs:15 FL:15}



static void Test_BFu7i_BFu15s_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, 1, "BFu7i_BFu15s_BFu15ll");
    set_bf_and_test(lv, v3, 3, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu15ll, BFu7i_BFu15s_BFu15ll)
//============================================================================


struct  BFu7i_BFu15s_BFu15s  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu15s_BFu15s) C1{ Fi:7 Fs:15 Fs:15}



static void Test_BFu7i_BFu15s_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu15s");
    static STRUCT_IF_C BFu7i_BFu15s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu15s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu15s, BFu7i_BFu15s_BFu15s)
//============================================================================


struct  BFu7i_BFu15s_BFu16i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu15s_BFu16i) C1{ Fi:7 Fs:15 Fi:16}



static void Test_BFu7i_BFu15s_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu16i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu15s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu15s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu16i, BFu7i_BFu15s_BFu16i)
//============================================================================


struct  BFu7i_BFu15s_BFu16ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu15s_BFu16ll) C1{ Fi:7 Fs:15 FL:16}



static void Test_BFu7i_BFu15s_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, 1, "BFu7i_BFu15s_BFu16ll");
    set_bf_and_test(lv, v3, 3, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu15s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu16ll, BFu7i_BFu15s_BFu16ll)
//============================================================================


struct  BFu7i_BFu15s_BFu16s  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu15s_BFu16s) C1{ Fi:7 Fs:15 Fs:16}



static void Test_BFu7i_BFu15s_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu16s");
    static STRUCT_IF_C BFu7i_BFu15s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu15s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu15s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu16s, BFu7i_BFu15s_BFu16s)
//============================================================================


struct  BFu7i_BFu15s_BFu17i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu15s_BFu17i) C1{ Fi:7 Fs:15 Fi:17}



static void Test_BFu7i_BFu15s_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu17i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu15s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu15s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu17i, BFu7i_BFu15s_BFu17i)
//============================================================================


struct  BFu7i_BFu15s_BFu17ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu15s_BFu17ll) C1{ Fi:7 Fs:15 FL:17}



static void Test_BFu7i_BFu15s_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, 1, "BFu7i_BFu15s_BFu17ll");
    set_bf_and_test(lv, v3, 3, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu15s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu17ll, BFu7i_BFu15s_BFu17ll)
//============================================================================


struct  BFu7i_BFu15s_BFu1c  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu15s_BFu1c) C1{ Fi:7 Fs:15 Fc:1}



static void Test_BFu7i_BFu15s_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu1c");
    static STRUCT_IF_C BFu7i_BFu15s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu1c");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7i_BFu15s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu1c, BFu7i_BFu15s_BFu1c)
//============================================================================


struct  BFu7i_BFu15s_BFu1i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu15s_BFu1i) C1{ Fi:7 Fs:15 Fi:1}



static void Test_BFu7i_BFu15s_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu1i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu1i");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7i_BFu15s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu1i, BFu7i_BFu15s_BFu1i)
//============================================================================


struct  BFu7i_BFu15s_BFu1ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu15s_BFu1ll) C1{ Fi:7 Fs:15 FL:1}



static void Test_BFu7i_BFu15s_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu15s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu1ll");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7i_BFu15s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu1ll, BFu7i_BFu15s_BFu1ll)
//============================================================================


struct  BFu7i_BFu15s_BFu1s  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu15s_BFu1s) C1{ Fi:7 Fs:15 Fs:1}



static void Test_BFu7i_BFu15s_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu1s");
    static STRUCT_IF_C BFu7i_BFu15s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu15s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu1s");
    set_bf_and_test(lv, v3, 3, 7, 1, 1, "BFu7i_BFu15s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu1s, BFu7i_BFu15s_BFu1s)
//============================================================================


struct  BFu7i_BFu15s_BFu31i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu15s_BFu31i) C1{ Fi:7 Fs:15 Fi:31}



static void Test_BFu7i_BFu15s_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu31i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu15s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu15s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu31i, BFu7i_BFu15s_BFu31i)
//============================================================================


struct  BFu7i_BFu15s_BFu31ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu15s_BFu31ll) C1{ Fi:7 Fs:15 FL:31}



static void Test_BFu7i_BFu15s_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, 1, "BFu7i_BFu15s_BFu31ll");
    set_bf_and_test(lv, v3, 3, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu15s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu31ll, BFu7i_BFu15s_BFu31ll)
//============================================================================


struct  BFu7i_BFu15s_BFu32i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu15s_BFu32i) C1{ Fi:7 Fs:15 Fi:32}



static void Test_BFu7i_BFu15s_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu32i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu15s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu15s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu32i, BFu7i_BFu15s_BFu32i)
//============================================================================


struct  BFu7i_BFu15s_BFu32ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu15s_BFu32ll) C1{ Fi:7 Fs:15 FL:32}



static void Test_BFu7i_BFu15s_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, 1, "BFu7i_BFu15s_BFu32ll");
    set_bf_and_test(lv, v3, 3, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu15s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu32ll, BFu7i_BFu15s_BFu32ll)
//============================================================================


struct  BFu7i_BFu15s_BFu33  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu15s_BFu33) C1{ Fi:7 Fs:15 FL:33}



static void Test_BFu7i_BFu15s_BFu33()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu33");
    static STRUCT_IF_C BFu7i_BFu15s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, 1, "BFu7i_BFu15s_BFu33");
    set_bf_and_test(lv, v3, 3, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu15s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu33, BFu7i_BFu15s_BFu33)
//============================================================================


struct  BFu7i_BFu15s_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu15s_BFu7c) C1{ Fi:7 Fs:15 Fc:7}



static void Test_BFu7i_BFu15s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu15s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_BFu15s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu7c, BFu7i_BFu15s_BFu7c)
//============================================================================


struct  BFu7i_BFu15s_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu15s_BFu7i) C1{ Fi:7 Fs:15 Fi:7}



static void Test_BFu7i_BFu15s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_BFu15s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu7i, BFu7i_BFu15s_BFu7i)
//============================================================================


struct  BFu7i_BFu15s_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu15s_BFu7ll) C1{ Fi:7 Fs:15 FL:7}



static void Test_BFu7i_BFu15s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, 1, "BFu7i_BFu15s_BFu7ll");
    set_bf_and_test(lv, v3, 3, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu7ll, BFu7i_BFu15s_BFu7ll)
//============================================================================


struct  BFu7i_BFu15s_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu15s_BFu7s) C1{ Fi:7 Fs:15 Fs:7}



static void Test_BFu7i_BFu15s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu15s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_BFu15s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu7s, BFu7i_BFu15s_BFu7s)
//============================================================================


struct  BFu7i_BFu15s_BFu8c  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu15s_BFu8c) C1{ Fi:7 Fs:15 Fc:8}



static void Test_BFu7i_BFu15s_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu8c");
    static STRUCT_IF_C BFu7i_BFu15s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_BFu15s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu15s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu8c, BFu7i_BFu15s_BFu8c)
//============================================================================


struct  BFu7i_BFu15s_BFu8i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu15s_BFu8i) C1{ Fi:7 Fs:15 Fi:8}



static void Test_BFu7i_BFu15s_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu8i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_BFu15s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu15s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu8i, BFu7i_BFu15s_BFu8i)
//============================================================================


struct  BFu7i_BFu15s_BFu8ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu15s_BFu8ll) C1{ Fi:7 Fs:15 FL:8}



static void Test_BFu7i_BFu15s_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, 1, "BFu7i_BFu15s_BFu8ll");
    set_bf_and_test(lv, v3, 3, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu15s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu8ll, BFu7i_BFu15s_BFu8ll)
//============================================================================


struct  BFu7i_BFu15s_BFu8s  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu15s_BFu8s) C1{ Fi:7 Fs:15 Fs:8}



static void Test_BFu7i_BFu15s_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu8s");
    static STRUCT_IF_C BFu7i_BFu15s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_BFu15s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu15s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu8s, BFu7i_BFu15s_BFu8s)
//============================================================================


struct  BFu7i_BFu15s_BFu9i  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu15s_BFu9i) C1{ Fi:7 Fs:15 Fi:9}



static void Test_BFu7i_BFu15s_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu9i");
    static STRUCT_IF_C BFu7i_BFu15s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu15s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu15s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu9i, BFu7i_BFu15s_BFu9i)
//============================================================================


struct  BFu7i_BFu15s_BFu9ll  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu15s_BFu9ll) C1{ Fi:7 Fs:15 FL:9}



static void Test_BFu7i_BFu15s_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu15s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, 1, "BFu7i_BFu15s_BFu9ll");
    set_bf_and_test(lv, v3, 3, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu15s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu9ll, BFu7i_BFu15s_BFu9ll)
//============================================================================


struct  BFu7i_BFu15s_BFu9s  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu15s_BFu9s) C1{ Fi:7 Fs:15 Fs:9}



static void Test_BFu7i_BFu15s_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu15s_BFu9s");
    static STRUCT_IF_C BFu7i_BFu15s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu15s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu15s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_BFu9s, BFu7i_BFu15s_BFu9s)
//============================================================================


struct  BFu7i_BFu15s_C  {
  unsigned int v1:7;
  unsigned short v2:15;
  char v3;
};
//SIG(1 BFu7i_BFu15s_C) C1{ Fi:7 Fs:15 Fc}



static void Test_BFu7i_BFu15s_C()
{
  {
    init_simple_test("BFu7i_BFu15s_C");
    static STRUCT_IF_C BFu7i_BFu15s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_C");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_C");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_C, BFu7i_BFu15s_C)
//============================================================================


struct  BFu7i_BFu15s_D  {
  unsigned int v1:7;
  unsigned short v2:15;
  double v3;
};
//SIG(1 BFu7i_BFu15s_D) C1{ Fi:7 Fs:15 FL}



static void Test_BFu7i_BFu15s_D()
{
  {
    init_simple_test("BFu7i_BFu15s_D");
    static STRUCT_IF_C BFu7i_BFu15s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_D");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_D, BFu7i_BFu15s_D)
//============================================================================


struct  BFu7i_BFu15s_F  {
  unsigned int v1:7;
  unsigned short v2:15;
  float v3;
};
//SIG(1 BFu7i_BFu15s_F) C1{ Fi:7 Fs:15 Fi}



static void Test_BFu7i_BFu15s_F()
{
  {
    init_simple_test("BFu7i_BFu15s_F");
    static STRUCT_IF_C BFu7i_BFu15s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_F");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_F, BFu7i_BFu15s_F)
//============================================================================


struct  BFu7i_BFu15s_I  {
  unsigned int v1:7;
  unsigned short v2:15;
  int v3;
};
//SIG(1 BFu7i_BFu15s_I) C1{ Fi:7 Fs:15 Fi}



static void Test_BFu7i_BFu15s_I()
{
  {
    init_simple_test("BFu7i_BFu15s_I");
    static STRUCT_IF_C BFu7i_BFu15s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_I");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_I, BFu7i_BFu15s_I)
//============================================================================


struct  BFu7i_BFu15s_Ip  {
  unsigned int v1:7;
  unsigned short v2:15;
  int *v3;
};
//SIG(1 BFu7i_BFu15s_Ip) C1{ Fi:7 Fs:15 Fp}



static void Test_BFu7i_BFu15s_Ip()
{
  {
    init_simple_test("BFu7i_BFu15s_Ip");
    static STRUCT_IF_C BFu7i_BFu15s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu15s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_Ip, BFu7i_BFu15s_Ip)
//============================================================================


struct  BFu7i_BFu15s_L  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu15s_L) C1{ Fi:7 Fs:15 FL}



static void Test_BFu7i_BFu15s_L()
{
  {
    init_simple_test("BFu7i_BFu15s_L");
    static STRUCT_IF_C BFu7i_BFu15s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_L");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_L, BFu7i_BFu15s_L)
//============================================================================


struct  BFu7i_BFu15s_S  {
  unsigned int v1:7;
  unsigned short v2:15;
  short v3;
};
//SIG(1 BFu7i_BFu15s_S) C1{ Fi:7 Fs:15 Fs}



static void Test_BFu7i_BFu15s_S()
{
  {
    init_simple_test("BFu7i_BFu15s_S");
    static STRUCT_IF_C BFu7i_BFu15s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_S");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_S");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_S, BFu7i_BFu15s_S)
//============================================================================


struct  BFu7i_BFu15s_Uc  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu15s_Uc) C1{ Fi:7 Fs:15 Fc}



static void Test_BFu7i_BFu15s_Uc()
{
  {
    init_simple_test("BFu7i_BFu15s_Uc");
    static STRUCT_IF_C BFu7i_BFu15s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_Uc");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_Uc, BFu7i_BFu15s_Uc)
//============================================================================


struct  BFu7i_BFu15s_Ui  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu15s_Ui) C1{ Fi:7 Fs:15 Fi}



static void Test_BFu7i_BFu15s_Ui()
{
  {
    init_simple_test("BFu7i_BFu15s_Ui");
    static STRUCT_IF_C BFu7i_BFu15s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_Ui, BFu7i_BFu15s_Ui)
//============================================================================


struct  BFu7i_BFu15s_Ul  {
  unsigned int v1:7;
  unsigned short v2:15;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu15s_Ul) C1{ Fi:7 Fs:15 FL}



static void Test_BFu7i_BFu15s_Ul()
{
  {
    init_simple_test("BFu7i_BFu15s_Ul");
    static STRUCT_IF_C BFu7i_BFu15s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu15s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_Ul, BFu7i_BFu15s_Ul)
//============================================================================


struct  BFu7i_BFu15s_Us  {
  unsigned int v1:7;
  unsigned short v2:15;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu15s_Us) C1{ Fi:7 Fs:15 Fs}



static void Test_BFu7i_BFu15s_Us()
{
  {
    init_simple_test("BFu7i_BFu15s_Us");
    static STRUCT_IF_C BFu7i_BFu15s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu15s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu15s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_Us");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_Us");
    check_field_offset(lv, v3, 4, "BFu7i_BFu15s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_Us, BFu7i_BFu15s_Us)
//============================================================================


struct  BFu7i_BFu15s_Vp  {
  unsigned int v1:7;
  unsigned short v2:15;
  void *v3;
};
//SIG(1 BFu7i_BFu15s_Vp) C1{ Fi:7 Fs:15 Fp}



static void Test_BFu7i_BFu15s_Vp()
{
  {
    init_simple_test("BFu7i_BFu15s_Vp");
    static STRUCT_IF_C BFu7i_BFu15s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu15s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu15s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu15s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, 1, "BFu7i_BFu15s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu15s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu15s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu15s_Vp, BFu7i_BFu15s_Vp)
//============================================================================


struct  BFu7i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:16;
};
//SIG(1 BFu7i_BFu16i) C1{ Fi:7 Fi:16}



static void Test_BFu7i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i, BFu7i_BFu16i)
//============================================================================


struct  BFu7i_BFu16i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu16i_BFu15i) C1{ Fi:7 Fi:16 Fi:15}



static void Test_BFu7i_BFu16i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu16i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu16i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu15i, BFu7i_BFu16i_BFu15i)
//============================================================================


struct  BFu7i_BFu16i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu16i_BFu15ll) C1{ Fi:7 Fi:16 FL:15}



static void Test_BFu7i_BFu16i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu7i_BFu16i_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu16i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu15ll, BFu7i_BFu16i_BFu15ll)
//============================================================================


struct  BFu7i_BFu16i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu16i_BFu15s) C1{ Fi:7 Fi:16 Fs:15}



static void Test_BFu7i_BFu16i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu16i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu16i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu16i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu15s, BFu7i_BFu16i_BFu15s)
//============================================================================


struct  BFu7i_BFu16i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu16i_BFu16i) C1{ Fi:7 Fi:16 Fi:16}



static void Test_BFu7i_BFu16i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu16i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu16i, BFu7i_BFu16i_BFu16i)
//============================================================================


struct  BFu7i_BFu16i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu16i_BFu16ll) C1{ Fi:7 Fi:16 FL:16}



static void Test_BFu7i_BFu16i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu7i_BFu16i_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu16ll, BFu7i_BFu16i_BFu16ll)
//============================================================================


struct  BFu7i_BFu16i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu16i_BFu16s) C1{ Fi:7 Fi:16 Fs:16}



static void Test_BFu7i_BFu16i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu16i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu16i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu16s, BFu7i_BFu16i_BFu16s)
//============================================================================


struct  BFu7i_BFu16i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu16i_BFu17i) C1{ Fi:7 Fi:16 Fi:17}



static void Test_BFu7i_BFu16i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu16i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu16i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu17i, BFu7i_BFu16i_BFu17i)
//============================================================================


struct  BFu7i_BFu16i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu16i_BFu17ll) C1{ Fi:7 Fi:16 FL:17}



static void Test_BFu7i_BFu16i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu7i_BFu16i_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu16i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu17ll, BFu7i_BFu16i_BFu17ll)
//============================================================================


struct  BFu7i_BFu16i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu16i_BFu1c) C1{ Fi:7 Fi:16 Fc:1}



static void Test_BFu7i_BFu16i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu16i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7i_BFu16i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu1c, BFu7i_BFu16i_BFu1c)
//============================================================================


struct  BFu7i_BFu16i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu16i_BFu1i) C1{ Fi:7 Fi:16 Fi:1}



static void Test_BFu7i_BFu16i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7i_BFu16i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu1i, BFu7i_BFu16i_BFu1i)
//============================================================================


struct  BFu7i_BFu16i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu16i_BFu1ll) C1{ Fi:7 Fi:16 FL:1}



static void Test_BFu7i_BFu16i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7i_BFu16i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu1ll, BFu7i_BFu16i_BFu1ll)
//============================================================================


struct  BFu7i_BFu16i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu16i_BFu1s) C1{ Fi:7 Fi:16 Fs:1}



static void Test_BFu7i_BFu16i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu16i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7i_BFu16i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu1s, BFu7i_BFu16i_BFu1s)
//============================================================================


struct  BFu7i_BFu16i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu16i_BFu31i) C1{ Fi:7 Fi:16 Fi:31}



static void Test_BFu7i_BFu16i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu16i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu16i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu31i, BFu7i_BFu16i_BFu31i)
//============================================================================


struct  BFu7i_BFu16i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu16i_BFu31ll) C1{ Fi:7 Fi:16 FL:31}



static void Test_BFu7i_BFu16i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu7i_BFu16i_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu16i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu31ll, BFu7i_BFu16i_BFu31ll)
//============================================================================


struct  BFu7i_BFu16i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu16i_BFu32i) C1{ Fi:7 Fi:16 Fi:32}



static void Test_BFu7i_BFu16i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu16i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu16i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu32i, BFu7i_BFu16i_BFu32i)
//============================================================================


struct  BFu7i_BFu16i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu16i_BFu32ll) C1{ Fi:7 Fi:16 FL:32}



static void Test_BFu7i_BFu16i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu7i_BFu16i_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu16i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu32ll, BFu7i_BFu16i_BFu32ll)
//============================================================================


struct  BFu7i_BFu16i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu16i_BFu33) C1{ Fi:7 Fi:16 FL:33}



static void Test_BFu7i_BFu16i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu33");
    static STRUCT_IF_C BFu7i_BFu16i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu7i_BFu16i_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu16i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu33, BFu7i_BFu16i_BFu33)
//============================================================================


struct  BFu7i_BFu16i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu16i_BFu7c) C1{ Fi:7 Fi:16 Fc:7}



static void Test_BFu7i_BFu16i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu16i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu16i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu7c, BFu7i_BFu16i_BFu7c)
//============================================================================


struct  BFu7i_BFu16i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu16i_BFu7i) C1{ Fi:7 Fi:16 Fi:7}



static void Test_BFu7i_BFu16i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7i_BFu16i_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu7i, BFu7i_BFu16i_BFu7i)
//============================================================================


struct  BFu7i_BFu16i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu16i_BFu7ll) C1{ Fi:7 Fi:16 FL:7}



static void Test_BFu7i_BFu16i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7i_BFu16i_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu7ll, BFu7i_BFu16i_BFu7ll)
//============================================================================


struct  BFu7i_BFu16i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu16i_BFu7s) C1{ Fi:7 Fi:16 Fs:7}



static void Test_BFu7i_BFu16i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu16i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7i_BFu16i_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu7s, BFu7i_BFu16i_BFu7s)
//============================================================================


struct  BFu7i_BFu16i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu16i_BFu8c) C1{ Fi:7 Fi:16 Fc:8}



static void Test_BFu7i_BFu16i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu16i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu16i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu16i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu8c, BFu7i_BFu16i_BFu8c)
//============================================================================


struct  BFu7i_BFu16i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu16i_BFu8i) C1{ Fi:7 Fi:16 Fi:8}



static void Test_BFu7i_BFu16i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7i_BFu16i_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu16i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu8i, BFu7i_BFu16i_BFu8i)
//============================================================================


struct  BFu7i_BFu16i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu16i_BFu8ll) C1{ Fi:7 Fi:16 FL:8}



static void Test_BFu7i_BFu16i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7i_BFu16i_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu16i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu8ll, BFu7i_BFu16i_BFu8ll)
//============================================================================


struct  BFu7i_BFu16i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu16i_BFu8s) C1{ Fi:7 Fi:16 Fs:8}



static void Test_BFu7i_BFu16i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu16i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7i_BFu16i_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu16i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu8s, BFu7i_BFu16i_BFu8s)
//============================================================================


struct  BFu7i_BFu16i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu16i_BFu9i) C1{ Fi:7 Fi:16 Fi:9}



static void Test_BFu7i_BFu16i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu16i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7i_BFu16i_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu16i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu9i, BFu7i_BFu16i_BFu9i)
//============================================================================


struct  BFu7i_BFu16i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu16i_BFu9ll) C1{ Fi:7 Fi:16 FL:9}



static void Test_BFu7i_BFu16i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu16i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7i_BFu16i_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu16i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu9ll, BFu7i_BFu16i_BFu9ll)
//============================================================================


struct  BFu7i_BFu16i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu16i_BFu9s) C1{ Fi:7 Fi:16 Fs:9}



static void Test_BFu7i_BFu16i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu16i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu16i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7i_BFu16i_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu16i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_BFu9s, BFu7i_BFu16i_BFu9s)
//============================================================================


struct  BFu7i_BFu16i_C  {
  unsigned int v1:7;
  unsigned int v2:16;
  char v3;
};
//SIG(1 BFu7i_BFu16i_C) C1{ Fi:7 Fi:16 Fc}



static void Test_BFu7i_BFu16i_C()
{
  {
    init_simple_test("BFu7i_BFu16i_C");
    static STRUCT_IF_C BFu7i_BFu16i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_C");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_C");
    check_field_offset(lv, v3, 3, "BFu7i_BFu16i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_C, BFu7i_BFu16i_C)
//============================================================================


struct  BFu7i_BFu16i_D  {
  unsigned int v1:7;
  unsigned int v2:16;
  double v3;
};
//SIG(1 BFu7i_BFu16i_D) C1{ Fi:7 Fi:16 FL}



static void Test_BFu7i_BFu16i_D()
{
  {
    init_simple_test("BFu7i_BFu16i_D");
    static STRUCT_IF_C BFu7i_BFu16i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_D");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_D, BFu7i_BFu16i_D)
//============================================================================


struct  BFu7i_BFu16i_F  {
  unsigned int v1:7;
  unsigned int v2:16;
  float v3;
};
//SIG(1 BFu7i_BFu16i_F) C1{ Fi:7 Fi:16 Fi}



static void Test_BFu7i_BFu16i_F()
{
  {
    init_simple_test("BFu7i_BFu16i_F");
    static STRUCT_IF_C BFu7i_BFu16i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_F");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_F, BFu7i_BFu16i_F)
//============================================================================


struct  BFu7i_BFu16i_I  {
  unsigned int v1:7;
  unsigned int v2:16;
  int v3;
};
//SIG(1 BFu7i_BFu16i_I) C1{ Fi:7 Fi:16 Fi}



static void Test_BFu7i_BFu16i_I()
{
  {
    init_simple_test("BFu7i_BFu16i_I");
    static STRUCT_IF_C BFu7i_BFu16i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_I");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_I, BFu7i_BFu16i_I)
//============================================================================


struct  BFu7i_BFu16i_Ip  {
  unsigned int v1:7;
  unsigned int v2:16;
  int *v3;
};
//SIG(1 BFu7i_BFu16i_Ip) C1{ Fi:7 Fi:16 Fp}



static void Test_BFu7i_BFu16i_Ip()
{
  {
    init_simple_test("BFu7i_BFu16i_Ip");
    static STRUCT_IF_C BFu7i_BFu16i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu16i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_Ip, BFu7i_BFu16i_Ip)
//============================================================================


struct  BFu7i_BFu16i_L  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu16i_L) C1{ Fi:7 Fi:16 FL}



static void Test_BFu7i_BFu16i_L()
{
  {
    init_simple_test("BFu7i_BFu16i_L");
    static STRUCT_IF_C BFu7i_BFu16i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_L");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_L, BFu7i_BFu16i_L)
//============================================================================


struct  BFu7i_BFu16i_S  {
  unsigned int v1:7;
  unsigned int v2:16;
  short v3;
};
//SIG(1 BFu7i_BFu16i_S) C1{ Fi:7 Fi:16 Fs}



static void Test_BFu7i_BFu16i_S()
{
  {
    init_simple_test("BFu7i_BFu16i_S");
    static STRUCT_IF_C BFu7i_BFu16i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_S");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_S");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_S, BFu7i_BFu16i_S)
//============================================================================


struct  BFu7i_BFu16i_Uc  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu16i_Uc) C1{ Fi:7 Fi:16 Fc}



static void Test_BFu7i_BFu16i_Uc()
{
  {
    init_simple_test("BFu7i_BFu16i_Uc");
    static STRUCT_IF_C BFu7i_BFu16i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_Uc");
    check_field_offset(lv, v3, 3, "BFu7i_BFu16i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_Uc, BFu7i_BFu16i_Uc)
//============================================================================


struct  BFu7i_BFu16i_Ui  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu16i_Ui) C1{ Fi:7 Fi:16 Fi}



static void Test_BFu7i_BFu16i_Ui()
{
  {
    init_simple_test("BFu7i_BFu16i_Ui");
    static STRUCT_IF_C BFu7i_BFu16i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_Ui, BFu7i_BFu16i_Ui)
//============================================================================


struct  BFu7i_BFu16i_Ul  {
  unsigned int v1:7;
  unsigned int v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu16i_Ul) C1{ Fi:7 Fi:16 FL}



static void Test_BFu7i_BFu16i_Ul()
{
  {
    init_simple_test("BFu7i_BFu16i_Ul");
    static STRUCT_IF_C BFu7i_BFu16i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_Ul, BFu7i_BFu16i_Ul)
//============================================================================


struct  BFu7i_BFu16i_Us  {
  unsigned int v1:7;
  unsigned int v2:16;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu16i_Us) C1{ Fi:7 Fi:16 Fs}



static void Test_BFu7i_BFu16i_Us()
{
  {
    init_simple_test("BFu7i_BFu16i_Us");
    static STRUCT_IF_C BFu7i_BFu16i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_Us");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_Us, BFu7i_BFu16i_Us)
//============================================================================


struct  BFu7i_BFu16i_Vp  {
  unsigned int v1:7;
  unsigned int v2:16;
  void *v3;
};
//SIG(1 BFu7i_BFu16i_Vp) C1{ Fi:7 Fi:16 Fp}



static void Test_BFu7i_BFu16i_Vp()
{
  {
    init_simple_test("BFu7i_BFu16i_Vp");
    static STRUCT_IF_C BFu7i_BFu16i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu16i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16i_Vp, BFu7i_BFu16i_Vp)
//============================================================================


struct  BFu7i_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
};
//SIG(1 BFu7i_BFu16ll) C1{ Fi:7 FL:16}



static void Test_BFu7i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll, BFu7i_BFu16ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu16ll_BFu15i) C1{ Fi:7 FL:16 Fi:15}



static void Test_BFu7i_BFu16ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu16ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu16ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu15i, BFu7i_BFu16ll_BFu15i)
//============================================================================


struct  BFu7i_BFu16ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu16ll_BFu15ll) C1{ Fi:7 FL:16 FL:15}



static void Test_BFu7i_BFu16ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, 1, "BFu7i_BFu16ll_BFu15ll");
    set_bf_and_test(lv, v3, 2, 7, 15, hide_ull(1LL<<14), "BFu7i_BFu16ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu15ll, BFu7i_BFu16ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu16ll_BFu15s) C1{ Fi:7 FL:16 Fs:15}



static void Test_BFu7i_BFu16ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu16ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu16ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu15s, BFu7i_BFu16ll_BFu15s)
//============================================================================


struct  BFu7i_BFu16ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu16ll_BFu16i) C1{ Fi:7 FL:16 Fi:16}



static void Test_BFu7i_BFu16ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu16ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu16i, BFu7i_BFu16ll_BFu16i)
//============================================================================


struct  BFu7i_BFu16ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu16ll_BFu16ll) C1{ Fi:7 FL:16 FL:16}



static void Test_BFu7i_BFu16ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, 1, "BFu7i_BFu16ll_BFu16ll");
    set_bf_and_test(lv, v3, 2, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu16ll, BFu7i_BFu16ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu16ll_BFu16s) C1{ Fi:7 FL:16 Fs:16}



static void Test_BFu7i_BFu16ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu16ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu16s, BFu7i_BFu16ll_BFu16s)
//============================================================================


struct  BFu7i_BFu16ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu16ll_BFu17i) C1{ Fi:7 FL:16 Fi:17}



static void Test_BFu7i_BFu16ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu16ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu16ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu17i, BFu7i_BFu16ll_BFu17i)
//============================================================================


struct  BFu7i_BFu16ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu16ll_BFu17ll) C1{ Fi:7 FL:16 FL:17}



static void Test_BFu7i_BFu16ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, 1, "BFu7i_BFu16ll_BFu17ll");
    set_bf_and_test(lv, v3, 2, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu16ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu17ll, BFu7i_BFu16ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu16ll_BFu1c) C1{ Fi:7 FL:16 Fc:1}



static void Test_BFu7i_BFu16ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu1c");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7i_BFu16ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu1c, BFu7i_BFu16ll_BFu1c)
//============================================================================


struct  BFu7i_BFu16ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu16ll_BFu1i) C1{ Fi:7 FL:16 Fi:1}



static void Test_BFu7i_BFu16ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu1i");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7i_BFu16ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu1i, BFu7i_BFu16ll_BFu1i)
//============================================================================


struct  BFu7i_BFu16ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu16ll_BFu1ll) C1{ Fi:7 FL:16 FL:1}



static void Test_BFu7i_BFu16ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu1ll");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7i_BFu16ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu1ll, BFu7i_BFu16ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu16ll_BFu1s) C1{ Fi:7 FL:16 Fs:1}



static void Test_BFu7i_BFu16ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu1s");
    set_bf_and_test(lv, v3, 2, 7, 1, 1, "BFu7i_BFu16ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu1s, BFu7i_BFu16ll_BFu1s)
//============================================================================


struct  BFu7i_BFu16ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu16ll_BFu31i) C1{ Fi:7 FL:16 Fi:31}



static void Test_BFu7i_BFu16ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu16ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu16ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu31i, BFu7i_BFu16ll_BFu31i)
//============================================================================


struct  BFu7i_BFu16ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu16ll_BFu31ll) C1{ Fi:7 FL:16 FL:31}



static void Test_BFu7i_BFu16ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, 1, "BFu7i_BFu16ll_BFu31ll");
    set_bf_and_test(lv, v3, 2, 7, 31, hide_ull(1LL<<30), "BFu7i_BFu16ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu31ll, BFu7i_BFu16ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu16ll_BFu32i) C1{ Fi:7 FL:16 Fi:32}



static void Test_BFu7i_BFu16ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu16ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu16ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu32i, BFu7i_BFu16ll_BFu32i)
//============================================================================


struct  BFu7i_BFu16ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu16ll_BFu32ll) C1{ Fi:7 FL:16 FL:32}



static void Test_BFu7i_BFu16ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, 1, "BFu7i_BFu16ll_BFu32ll");
    set_bf_and_test(lv, v3, 2, 7, 32, hide_ull(1LL<<31), "BFu7i_BFu16ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu32ll, BFu7i_BFu16ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu16ll_BFu33) C1{ Fi:7 FL:16 FL:33}



static void Test_BFu7i_BFu16ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, 1, "BFu7i_BFu16ll_BFu33");
    set_bf_and_test(lv, v3, 2, 7, 33, hide_ull(1LL<<32), "BFu7i_BFu16ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu33, BFu7i_BFu16ll_BFu33)
//============================================================================


struct  BFu7i_BFu16ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu16ll_BFu7c) C1{ Fi:7 FL:16 Fc:7}



static void Test_BFu7i_BFu16ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu16ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu7c, BFu7i_BFu16ll_BFu7c)
//============================================================================


struct  BFu7i_BFu16ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu16ll_BFu7i) C1{ Fi:7 FL:16 Fi:7}



static void Test_BFu7i_BFu16ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7i_BFu16ll_BFu7i");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu7i, BFu7i_BFu16ll_BFu7i)
//============================================================================


struct  BFu7i_BFu16ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu16ll_BFu7ll) C1{ Fi:7 FL:16 FL:7}



static void Test_BFu7i_BFu16ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7i_BFu16ll_BFu7ll");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu7ll, BFu7i_BFu16ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu16ll_BFu7s) C1{ Fi:7 FL:16 Fs:7}



static void Test_BFu7i_BFu16ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, 1, "BFu7i_BFu16ll_BFu7s");
    set_bf_and_test(lv, v3, 2, 7, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu7s, BFu7i_BFu16ll_BFu7s)
//============================================================================


struct  BFu7i_BFu16ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu16ll_BFu8c) C1{ Fi:7 FL:16 Fc:8}



static void Test_BFu7i_BFu16ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu16ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu16ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu8c, BFu7i_BFu16ll_BFu8c)
//============================================================================


struct  BFu7i_BFu16ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu16ll_BFu8i) C1{ Fi:7 FL:16 Fi:8}



static void Test_BFu7i_BFu16ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7i_BFu16ll_BFu8i");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu16ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu8i, BFu7i_BFu16ll_BFu8i)
//============================================================================


struct  BFu7i_BFu16ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu16ll_BFu8ll) C1{ Fi:7 FL:16 FL:8}



static void Test_BFu7i_BFu16ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7i_BFu16ll_BFu8ll");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu16ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu8ll, BFu7i_BFu16ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu16ll_BFu8s) C1{ Fi:7 FL:16 Fs:8}



static void Test_BFu7i_BFu16ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, 1, "BFu7i_BFu16ll_BFu8s");
    set_bf_and_test(lv, v3, 2, 7, 8, hide_ull(1LL<<7), "BFu7i_BFu16ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu8s, BFu7i_BFu16ll_BFu8s)
//============================================================================


struct  BFu7i_BFu16ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu16ll_BFu9i) C1{ Fi:7 FL:16 Fi:9}



static void Test_BFu7i_BFu16ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7i_BFu16ll_BFu9i");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu16ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu9i, BFu7i_BFu16ll_BFu9i)
//============================================================================


struct  BFu7i_BFu16ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu16ll_BFu9ll) C1{ Fi:7 FL:16 FL:9}



static void Test_BFu7i_BFu16ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7i_BFu16ll_BFu9ll");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu16ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu9ll, BFu7i_BFu16ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu16ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu16ll_BFu9s) C1{ Fi:7 FL:16 Fs:9}



static void Test_BFu7i_BFu16ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu16ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu16ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, 1, "BFu7i_BFu16ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 7, 9, hide_ull(1LL<<8), "BFu7i_BFu16ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_BFu9s, BFu7i_BFu16ll_BFu9s)
//============================================================================


struct  BFu7i_BFu16ll_C  {
  unsigned int v1:7;
  __tsu64 v2:16;
  char v3;
};
//SIG(1 BFu7i_BFu16ll_C) C1{ Fi:7 FL:16 Fc}



static void Test_BFu7i_BFu16ll_C()
{
  {
    init_simple_test("BFu7i_BFu16ll_C");
    static STRUCT_IF_C BFu7i_BFu16ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_C");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_C");
    check_field_offset(lv, v3, 3, "BFu7i_BFu16ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_C, BFu7i_BFu16ll_C)
//============================================================================


struct  BFu7i_BFu16ll_D  {
  unsigned int v1:7;
  __tsu64 v2:16;
  double v3;
};
//SIG(1 BFu7i_BFu16ll_D) C1{ Fi:7 FL:16 FL}



static void Test_BFu7i_BFu16ll_D()
{
  {
    init_simple_test("BFu7i_BFu16ll_D");
    static STRUCT_IF_C BFu7i_BFu16ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_D");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_D, BFu7i_BFu16ll_D)
//============================================================================


struct  BFu7i_BFu16ll_F  {
  unsigned int v1:7;
  __tsu64 v2:16;
  float v3;
};
//SIG(1 BFu7i_BFu16ll_F) C1{ Fi:7 FL:16 Fi}



static void Test_BFu7i_BFu16ll_F()
{
  {
    init_simple_test("BFu7i_BFu16ll_F");
    static STRUCT_IF_C BFu7i_BFu16ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_F");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_F, BFu7i_BFu16ll_F)
//============================================================================


struct  BFu7i_BFu16ll_I  {
  unsigned int v1:7;
  __tsu64 v2:16;
  int v3;
};
//SIG(1 BFu7i_BFu16ll_I) C1{ Fi:7 FL:16 Fi}



static void Test_BFu7i_BFu16ll_I()
{
  {
    init_simple_test("BFu7i_BFu16ll_I");
    static STRUCT_IF_C BFu7i_BFu16ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_I");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_I, BFu7i_BFu16ll_I)
//============================================================================


struct  BFu7i_BFu16ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:16;
  int *v3;
};
//SIG(1 BFu7i_BFu16ll_Ip) C1{ Fi:7 FL:16 Fp}



static void Test_BFu7i_BFu16ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu16ll_Ip");
    static STRUCT_IF_C BFu7i_BFu16ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu16ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_Ip, BFu7i_BFu16ll_Ip)
//============================================================================


struct  BFu7i_BFu16ll_L  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu16ll_L) C1{ Fi:7 FL:16 FL}



static void Test_BFu7i_BFu16ll_L()
{
  {
    init_simple_test("BFu7i_BFu16ll_L");
    static STRUCT_IF_C BFu7i_BFu16ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_L");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_L, BFu7i_BFu16ll_L)
//============================================================================


struct  BFu7i_BFu16ll_S  {
  unsigned int v1:7;
  __tsu64 v2:16;
  short v3;
};
//SIG(1 BFu7i_BFu16ll_S) C1{ Fi:7 FL:16 Fs}



static void Test_BFu7i_BFu16ll_S()
{
  {
    init_simple_test("BFu7i_BFu16ll_S");
    static STRUCT_IF_C BFu7i_BFu16ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_S");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_S");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_S, BFu7i_BFu16ll_S)
//============================================================================


struct  BFu7i_BFu16ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu16ll_Uc) C1{ Fi:7 FL:16 Fc}



static void Test_BFu7i_BFu16ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu16ll_Uc");
    static STRUCT_IF_C BFu7i_BFu16ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu16ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7i_BFu16ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_Uc, BFu7i_BFu16ll_Uc)
//============================================================================


struct  BFu7i_BFu16ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu16ll_Ui) C1{ Fi:7 FL:16 Fi}



static void Test_BFu7i_BFu16ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu16ll_Ui");
    static STRUCT_IF_C BFu7i_BFu16ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_Ui, BFu7i_BFu16ll_Ui)
//============================================================================


struct  BFu7i_BFu16ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu16ll_Ul) C1{ Fi:7 FL:16 FL}



static void Test_BFu7i_BFu16ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu16ll_Ul");
    static STRUCT_IF_C BFu7i_BFu16ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_Ul, BFu7i_BFu16ll_Ul)
//============================================================================


struct  BFu7i_BFu16ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:16;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu16ll_Us) C1{ Fi:7 FL:16 Fs}



static void Test_BFu7i_BFu16ll_Us()
{
  {
    init_simple_test("BFu7i_BFu16ll_Us");
    static STRUCT_IF_C BFu7i_BFu16ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_Us");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_Us, BFu7i_BFu16ll_Us)
//============================================================================


struct  BFu7i_BFu16ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:16;
  void *v3;
};
//SIG(1 BFu7i_BFu16ll_Vp) C1{ Fi:7 FL:16 Fp}



static void Test_BFu7i_BFu16ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu16ll_Vp");
    static STRUCT_IF_C BFu7i_BFu16ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu16ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, 1, "BFu7i_BFu16ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 16, hide_ull(1LL<<15), "BFu7i_BFu16ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16ll_Vp, BFu7i_BFu16ll_Vp)
//============================================================================


struct  BFu7i_BFu16s  {
  unsigned int v1:7;
  unsigned short v2:16;
};
//SIG(1 BFu7i_BFu16s) C1{ Fi:7 Fs:16}



static void Test_BFu7i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s, BFu7i_BFu16s)
//============================================================================


struct  BFu7i_BFu16s_BFu15i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu16s_BFu15i) C1{ Fi:7 Fs:16 Fi:15}



static void Test_BFu7i_BFu16s_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu15i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu15i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu16s_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu16s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu15i, BFu7i_BFu16s_BFu15i)
//============================================================================


struct  BFu7i_BFu16s_BFu15ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu16s_BFu15ll) C1{ Fi:7 Fs:16 FL:15}



static void Test_BFu7i_BFu16s_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu16s_BFu15ll");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu16s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu15ll, BFu7i_BFu16s_BFu15ll)
//============================================================================


struct  BFu7i_BFu16s_BFu15s  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu16s_BFu15s) C1{ Fi:7 Fs:16 Fs:15}



static void Test_BFu7i_BFu16s_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu15s");
    static STRUCT_IF_C BFu7i_BFu16s_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu15s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu16s_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu16s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu15s, BFu7i_BFu16s_BFu15s)
//============================================================================


struct  BFu7i_BFu16s_BFu16i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu16s_BFu16i) C1{ Fi:7 Fs:16 Fi:16}



static void Test_BFu7i_BFu16s_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu16i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu16i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu16s_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu16i, BFu7i_BFu16s_BFu16i)
//============================================================================


struct  BFu7i_BFu16s_BFu16ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu16s_BFu16ll) C1{ Fi:7 Fs:16 FL:16}



static void Test_BFu7i_BFu16s_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu16s_BFu16ll");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu16ll, BFu7i_BFu16s_BFu16ll)
//============================================================================


struct  BFu7i_BFu16s_BFu16s  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu16s_BFu16s) C1{ Fi:7 Fs:16 Fs:16}



static void Test_BFu7i_BFu16s_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu16s");
    static STRUCT_IF_C BFu7i_BFu16s_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu16s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu16s_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu16s, BFu7i_BFu16s_BFu16s)
//============================================================================


struct  BFu7i_BFu16s_BFu17i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu16s_BFu17i) C1{ Fi:7 Fs:16 Fi:17}



static void Test_BFu7i_BFu16s_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu17i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu17i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu16s_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu16s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu17i, BFu7i_BFu16s_BFu17i)
//============================================================================


struct  BFu7i_BFu16s_BFu17ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu16s_BFu17ll) C1{ Fi:7 Fs:16 FL:17}



static void Test_BFu7i_BFu16s_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu16s_BFu17ll");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu16s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu17ll, BFu7i_BFu16s_BFu17ll)
//============================================================================


struct  BFu7i_BFu16s_BFu1c  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu16s_BFu1c) C1{ Fi:7 Fs:16 Fc:1}



static void Test_BFu7i_BFu16s_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu1c");
    static STRUCT_IF_C BFu7i_BFu16s_BFu1c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu1c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu1c");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_BFu16s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu1c, BFu7i_BFu16s_BFu1c)
//============================================================================


struct  BFu7i_BFu16s_BFu1i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu16s_BFu1i) C1{ Fi:7 Fs:16 Fi:1}



static void Test_BFu7i_BFu16s_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu1i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu1i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu1i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu1i");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_BFu16s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu1i, BFu7i_BFu16s_BFu1i)
//============================================================================


struct  BFu7i_BFu16s_BFu1ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu16s_BFu1ll) C1{ Fi:7 Fs:16 FL:1}



static void Test_BFu7i_BFu16s_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu1ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu1ll");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_BFu16s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu1ll, BFu7i_BFu16s_BFu1ll)
//============================================================================


struct  BFu7i_BFu16s_BFu1s  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu16s_BFu1s) C1{ Fi:7 Fs:16 Fs:1}



static void Test_BFu7i_BFu16s_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu1s");
    static STRUCT_IF_C BFu7i_BFu16s_BFu1s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu1s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu1s");
    set_bf_and_test(lv, v3, 4, 0, 1, 1, "BFu7i_BFu16s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu1s, BFu7i_BFu16s_BFu1s)
//============================================================================


struct  BFu7i_BFu16s_BFu31i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu16s_BFu31i) C1{ Fi:7 Fs:16 Fi:31}



static void Test_BFu7i_BFu16s_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu31i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu31i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu16s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu16s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu31i, BFu7i_BFu16s_BFu31i)
//============================================================================


struct  BFu7i_BFu16s_BFu31ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu16s_BFu31ll) C1{ Fi:7 Fs:16 FL:31}



static void Test_BFu7i_BFu16s_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu16s_BFu31ll");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu16s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu31ll, BFu7i_BFu16s_BFu31ll)
//============================================================================


struct  BFu7i_BFu16s_BFu32i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu16s_BFu32i) C1{ Fi:7 Fs:16 Fi:32}



static void Test_BFu7i_BFu16s_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu32i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu32i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu16s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu16s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu32i, BFu7i_BFu16s_BFu32i)
//============================================================================


struct  BFu7i_BFu16s_BFu32ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu16s_BFu32ll) C1{ Fi:7 Fs:16 FL:32}



static void Test_BFu7i_BFu16s_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu16s_BFu32ll");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu16s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu32ll, BFu7i_BFu16s_BFu32ll)
//============================================================================


struct  BFu7i_BFu16s_BFu33  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu16s_BFu33) C1{ Fi:7 Fs:16 FL:33}



static void Test_BFu7i_BFu16s_BFu33()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu33");
    static STRUCT_IF_C BFu7i_BFu16s_BFu33 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu33");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, 1, "BFu7i_BFu16s_BFu33");
    set_bf_and_test(lv, v3, ABISELECT(8,4), 0, 33, hide_ull(1LL<<32), "BFu7i_BFu16s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu33, BFu7i_BFu16s_BFu33)
//============================================================================


struct  BFu7i_BFu16s_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu16s_BFu7c) C1{ Fi:7 Fs:16 Fc:7}



static void Test_BFu7i_BFu16s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu16s_BFu7c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu7c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_BFu16s_BFu7c");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu7c, BFu7i_BFu16s_BFu7c)
//============================================================================


struct  BFu7i_BFu16s_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu16s_BFu7i) C1{ Fi:7 Fs:16 Fi:7}



static void Test_BFu7i_BFu16s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu7i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu7i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_BFu16s_BFu7i");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu7i, BFu7i_BFu16s_BFu7i)
//============================================================================


struct  BFu7i_BFu16s_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu16s_BFu7ll) C1{ Fi:7 Fs:16 FL:7}



static void Test_BFu7i_BFu16s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu7ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_BFu16s_BFu7ll");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu7ll, BFu7i_BFu16s_BFu7ll)
//============================================================================


struct  BFu7i_BFu16s_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu16s_BFu7s) C1{ Fi:7 Fs:16 Fs:7}



static void Test_BFu7i_BFu16s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu16s_BFu7s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu7s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, 1, "BFu7i_BFu16s_BFu7s");
    set_bf_and_test(lv, v3, 4, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu7s, BFu7i_BFu16s_BFu7s)
//============================================================================


struct  BFu7i_BFu16s_BFu8c  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu16s_BFu8c) C1{ Fi:7 Fs:16 Fc:8}



static void Test_BFu7i_BFu16s_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu8c");
    static STRUCT_IF_C BFu7i_BFu16s_BFu8c lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu8c");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_BFu16s_BFu8c");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu16s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu8c, BFu7i_BFu16s_BFu8c)
//============================================================================


struct  BFu7i_BFu16s_BFu8i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu16s_BFu8i) C1{ Fi:7 Fs:16 Fi:8}



static void Test_BFu7i_BFu16s_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu8i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu8i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu8i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_BFu16s_BFu8i");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu16s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu8i, BFu7i_BFu16s_BFu8i)
//============================================================================


struct  BFu7i_BFu16s_BFu8ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu16s_BFu8ll) C1{ Fi:7 Fs:16 FL:8}



static void Test_BFu7i_BFu16s_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu8ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_BFu16s_BFu8ll");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu16s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu8ll, BFu7i_BFu16s_BFu8ll)
//============================================================================


struct  BFu7i_BFu16s_BFu8s  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu16s_BFu8s) C1{ Fi:7 Fs:16 Fs:8}



static void Test_BFu7i_BFu16s_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu8s");
    static STRUCT_IF_C BFu7i_BFu16s_BFu8s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu8s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, 1, "BFu7i_BFu16s_BFu8s");
    set_bf_and_test(lv, v3, 4, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu16s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu8s, BFu7i_BFu16s_BFu8s)
//============================================================================


struct  BFu7i_BFu16s_BFu9i  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu16s_BFu9i) C1{ Fi:7 Fs:16 Fi:9}



static void Test_BFu7i_BFu16s_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu9i");
    static STRUCT_IF_C BFu7i_BFu16s_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu9i");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu16s_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu16s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu9i, BFu7i_BFu16s_BFu9i)
//============================================================================


struct  BFu7i_BFu16s_BFu9ll  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu16s_BFu9ll) C1{ Fi:7 Fs:16 FL:9}



static void Test_BFu7i_BFu16s_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu16s_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu16s_BFu9ll");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu16s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu9ll, BFu7i_BFu16s_BFu9ll)
//============================================================================


struct  BFu7i_BFu16s_BFu9s  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu16s_BFu9s) C1{ Fi:7 Fs:16 Fs:9}



static void Test_BFu7i_BFu16s_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu16s_BFu9s");
    static STRUCT_IF_C BFu7i_BFu16s_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_BFu9s");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu16s_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu16s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_BFu9s, BFu7i_BFu16s_BFu9s)
//============================================================================


struct  BFu7i_BFu16s_C  {
  unsigned int v1:7;
  unsigned short v2:16;
  char v3;
};
//SIG(1 BFu7i_BFu16s_C) C1{ Fi:7 Fs:16 Fc}



static void Test_BFu7i_BFu16s_C()
{
  {
    init_simple_test("BFu7i_BFu16s_C");
    static STRUCT_IF_C BFu7i_BFu16s_C lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_C");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_C");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_C, BFu7i_BFu16s_C)
//============================================================================


struct  BFu7i_BFu16s_D  {
  unsigned int v1:7;
  unsigned short v2:16;
  double v3;
};
//SIG(1 BFu7i_BFu16s_D) C1{ Fi:7 Fs:16 FL}



static void Test_BFu7i_BFu16s_D()
{
  {
    init_simple_test("BFu7i_BFu16s_D");
    static STRUCT_IF_C BFu7i_BFu16s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_D");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_D, BFu7i_BFu16s_D)
//============================================================================


struct  BFu7i_BFu16s_F  {
  unsigned int v1:7;
  unsigned short v2:16;
  float v3;
};
//SIG(1 BFu7i_BFu16s_F) C1{ Fi:7 Fs:16 Fi}



static void Test_BFu7i_BFu16s_F()
{
  {
    init_simple_test("BFu7i_BFu16s_F");
    static STRUCT_IF_C BFu7i_BFu16s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_F");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_F, BFu7i_BFu16s_F)
//============================================================================


struct  BFu7i_BFu16s_I  {
  unsigned int v1:7;
  unsigned short v2:16;
  int v3;
};
//SIG(1 BFu7i_BFu16s_I) C1{ Fi:7 Fs:16 Fi}



static void Test_BFu7i_BFu16s_I()
{
  {
    init_simple_test("BFu7i_BFu16s_I");
    static STRUCT_IF_C BFu7i_BFu16s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_I");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_I, BFu7i_BFu16s_I)
//============================================================================


struct  BFu7i_BFu16s_Ip  {
  unsigned int v1:7;
  unsigned short v2:16;
  int *v3;
};
//SIG(1 BFu7i_BFu16s_Ip) C1{ Fi:7 Fs:16 Fp}



static void Test_BFu7i_BFu16s_Ip()
{
  {
    init_simple_test("BFu7i_BFu16s_Ip");
    static STRUCT_IF_C BFu7i_BFu16s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu16s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_Ip");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_Ip, BFu7i_BFu16s_Ip)
//============================================================================


struct  BFu7i_BFu16s_L  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu16s_L) C1{ Fi:7 Fs:16 FL}



static void Test_BFu7i_BFu16s_L()
{
  {
    init_simple_test("BFu7i_BFu16s_L");
    static STRUCT_IF_C BFu7i_BFu16s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_L");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_L, BFu7i_BFu16s_L)
//============================================================================


struct  BFu7i_BFu16s_S  {
  unsigned int v1:7;
  unsigned short v2:16;
  short v3;
};
//SIG(1 BFu7i_BFu16s_S) C1{ Fi:7 Fs:16 Fs}



static void Test_BFu7i_BFu16s_S()
{
  {
    init_simple_test("BFu7i_BFu16s_S");
    static STRUCT_IF_C BFu7i_BFu16s_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_S");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_S");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_S, BFu7i_BFu16s_S)
//============================================================================


struct  BFu7i_BFu16s_Uc  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu16s_Uc) C1{ Fi:7 Fs:16 Fc}



static void Test_BFu7i_BFu16s_Uc()
{
  {
    init_simple_test("BFu7i_BFu16s_Uc");
    static STRUCT_IF_C BFu7i_BFu16s_Uc lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_Uc");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_Uc");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_Uc, BFu7i_BFu16s_Uc)
//============================================================================


struct  BFu7i_BFu16s_Ui  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu16s_Ui) C1{ Fi:7 Fs:16 Fi}



static void Test_BFu7i_BFu16s_Ui()
{
  {
    init_simple_test("BFu7i_BFu16s_Ui");
    static STRUCT_IF_C BFu7i_BFu16s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_Ui");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_Ui, BFu7i_BFu16s_Ui)
//============================================================================


struct  BFu7i_BFu16s_Ul  {
  unsigned int v1:7;
  unsigned short v2:16;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu16s_Ul) C1{ Fi:7 Fs:16 FL}



static void Test_BFu7i_BFu16s_Ul()
{
  {
    init_simple_test("BFu7i_BFu16s_Ul");
    static STRUCT_IF_C BFu7i_BFu16s_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu16s_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_Ul");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16s_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_Ul, BFu7i_BFu16s_Ul)
//============================================================================


struct  BFu7i_BFu16s_Us  {
  unsigned int v1:7;
  unsigned short v2:16;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu16s_Us) C1{ Fi:7 Fs:16 Fs}



static void Test_BFu7i_BFu16s_Us()
{
  {
    init_simple_test("BFu7i_BFu16s_Us");
    static STRUCT_IF_C BFu7i_BFu16s_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu16s_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu16s_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_Us");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_Us");
    check_field_offset(lv, v3, 4, "BFu7i_BFu16s_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_Us, BFu7i_BFu16s_Us)
//============================================================================


struct  BFu7i_BFu16s_Vp  {
  unsigned int v1:7;
  unsigned short v2:16;
  void *v3;
};
//SIG(1 BFu7i_BFu16s_Vp) C1{ Fi:7 Fs:16 Fp}



static void Test_BFu7i_BFu16s_Vp()
{
  {
    init_simple_test("BFu7i_BFu16s_Vp");
    static STRUCT_IF_C BFu7i_BFu16s_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu16s_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu16s_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu16s_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, 1, "BFu7i_BFu16s_Vp");
    set_bf_and_test(lv, v2, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu16s_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu16s_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu16s_Vp, BFu7i_BFu16s_Vp)
//============================================================================


struct  BFu7i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:17;
};
//SIG(1 BFu7i_BFu17i) C1{ Fi:7 Fi:17}



static void Test_BFu7i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i, BFu7i_BFu17i)
//============================================================================


struct  BFu7i_BFu17i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu17i_BFu15i) C1{ Fi:7 Fi:17 Fi:15}



static void Test_BFu7i_BFu17i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu17i_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu17i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu15i, BFu7i_BFu17i_BFu15i)
//============================================================================


struct  BFu7i_BFu17i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu17i_BFu15ll) C1{ Fi:7 Fi:17 FL:15}



static void Test_BFu7i_BFu17i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu7i_BFu17i_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu17i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu15ll, BFu7i_BFu17i_BFu15ll)
//============================================================================


struct  BFu7i_BFu17i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu17i_BFu15s) C1{ Fi:7 Fi:17 Fs:15}



static void Test_BFu7i_BFu17i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu17i_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu17i_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu17i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu15s, BFu7i_BFu17i_BFu15s)
//============================================================================


struct  BFu7i_BFu17i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu17i_BFu16i) C1{ Fi:7 Fi:17 Fi:16}



static void Test_BFu7i_BFu17i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu17i_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu17i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu16i, BFu7i_BFu17i_BFu16i)
//============================================================================


struct  BFu7i_BFu17i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu17i_BFu16ll) C1{ Fi:7 Fi:17 FL:16}



static void Test_BFu7i_BFu17i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu7i_BFu17i_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu17i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu16ll, BFu7i_BFu17i_BFu16ll)
//============================================================================


struct  BFu7i_BFu17i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu17i_BFu16s) C1{ Fi:7 Fi:17 Fs:16}



static void Test_BFu7i_BFu17i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu17i_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu17i_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu17i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu16s, BFu7i_BFu17i_BFu16s)
//============================================================================


struct  BFu7i_BFu17i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu17i_BFu17i) C1{ Fi:7 Fi:17 Fi:17}



static void Test_BFu7i_BFu17i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu17i_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu17i, BFu7i_BFu17i_BFu17i)
//============================================================================


struct  BFu7i_BFu17i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu17i_BFu17ll) C1{ Fi:7 Fi:17 FL:17}



static void Test_BFu7i_BFu17i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu7i_BFu17i_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu17ll, BFu7i_BFu17i_BFu17ll)
//============================================================================


struct  BFu7i_BFu17i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu17i_BFu1c) C1{ Fi:7 Fi:17 Fc:1}



static void Test_BFu7i_BFu17i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu17i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7i_BFu17i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu1c, BFu7i_BFu17i_BFu1c)
//============================================================================


struct  BFu7i_BFu17i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu17i_BFu1i) C1{ Fi:7 Fi:17 Fi:1}



static void Test_BFu7i_BFu17i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7i_BFu17i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu1i, BFu7i_BFu17i_BFu1i)
//============================================================================


struct  BFu7i_BFu17i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu17i_BFu1ll) C1{ Fi:7 Fi:17 FL:1}



static void Test_BFu7i_BFu17i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7i_BFu17i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu1ll, BFu7i_BFu17i_BFu1ll)
//============================================================================


struct  BFu7i_BFu17i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu17i_BFu1s) C1{ Fi:7 Fi:17 Fs:1}



static void Test_BFu7i_BFu17i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu17i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7i_BFu17i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu1s, BFu7i_BFu17i_BFu1s)
//============================================================================


struct  BFu7i_BFu17i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu17i_BFu31i) C1{ Fi:7 Fi:17 Fi:31}



static void Test_BFu7i_BFu17i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu17i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu17i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu31i, BFu7i_BFu17i_BFu31i)
//============================================================================


struct  BFu7i_BFu17i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu17i_BFu31ll) C1{ Fi:7 Fi:17 FL:31}



static void Test_BFu7i_BFu17i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu7i_BFu17i_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu17i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu31ll, BFu7i_BFu17i_BFu31ll)
//============================================================================


struct  BFu7i_BFu17i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu17i_BFu32i) C1{ Fi:7 Fi:17 Fi:32}



static void Test_BFu7i_BFu17i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu17i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu17i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu32i, BFu7i_BFu17i_BFu32i)
//============================================================================


struct  BFu7i_BFu17i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu17i_BFu32ll) C1{ Fi:7 Fi:17 FL:32}



static void Test_BFu7i_BFu17i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu7i_BFu17i_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu17i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu32ll, BFu7i_BFu17i_BFu32ll)
//============================================================================


struct  BFu7i_BFu17i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu17i_BFu33) C1{ Fi:7 Fi:17 FL:33}



static void Test_BFu7i_BFu17i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu33");
    static STRUCT_IF_C BFu7i_BFu17i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu7i_BFu17i_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu17i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu33, BFu7i_BFu17i_BFu33)
//============================================================================


struct  BFu7i_BFu17i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu17i_BFu7c) C1{ Fi:7 Fi:17 Fc:7}



static void Test_BFu7i_BFu17i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu17i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu17i_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu7c, BFu7i_BFu17i_BFu7c)
//============================================================================


struct  BFu7i_BFu17i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu17i_BFu7i) C1{ Fi:7 Fi:17 Fi:7}



static void Test_BFu7i_BFu17i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu17i_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu7i, BFu7i_BFu17i_BFu7i)
//============================================================================


struct  BFu7i_BFu17i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu17i_BFu7ll) C1{ Fi:7 Fi:17 FL:7}



static void Test_BFu7i_BFu17i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu17i_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu7ll, BFu7i_BFu17i_BFu7ll)
//============================================================================


struct  BFu7i_BFu17i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu17i_BFu7s) C1{ Fi:7 Fi:17 Fs:7}



static void Test_BFu7i_BFu17i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu17i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu17i_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu7s, BFu7i_BFu17i_BFu7s)
//============================================================================


struct  BFu7i_BFu17i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu17i_BFu8c) C1{ Fi:7 Fi:17 Fc:8}



static void Test_BFu7i_BFu17i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu17i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu17i_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu17i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu8c, BFu7i_BFu17i_BFu8c)
//============================================================================


struct  BFu7i_BFu17i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu17i_BFu8i) C1{ Fi:7 Fi:17 Fi:8}



static void Test_BFu7i_BFu17i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu17i_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu17i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu8i, BFu7i_BFu17i_BFu8i)
//============================================================================


struct  BFu7i_BFu17i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu17i_BFu8ll) C1{ Fi:7 Fi:17 FL:8}



static void Test_BFu7i_BFu17i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu17i_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu17i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu8ll, BFu7i_BFu17i_BFu8ll)
//============================================================================


struct  BFu7i_BFu17i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu17i_BFu8s) C1{ Fi:7 Fi:17 Fs:8}



static void Test_BFu7i_BFu17i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu17i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu17i_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu17i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu8s, BFu7i_BFu17i_BFu8s)
//============================================================================


struct  BFu7i_BFu17i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu17i_BFu9i) C1{ Fi:7 Fi:17 Fi:9}



static void Test_BFu7i_BFu17i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu17i_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu17i_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu17i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu9i, BFu7i_BFu17i_BFu9i)
//============================================================================


struct  BFu7i_BFu17i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu17i_BFu9ll) C1{ Fi:7 Fi:17 FL:9}



static void Test_BFu7i_BFu17i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu17i_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu7i_BFu17i_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu17i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu9ll, BFu7i_BFu17i_BFu9ll)
//============================================================================


struct  BFu7i_BFu17i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu17i_BFu9s) C1{ Fi:7 Fi:17 Fs:9}



static void Test_BFu7i_BFu17i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu17i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu17i_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu17i_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu17i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_BFu9s, BFu7i_BFu17i_BFu9s)
//============================================================================


struct  BFu7i_BFu17i_C  {
  unsigned int v1:7;
  unsigned int v2:17;
  char v3;
};
//SIG(1 BFu7i_BFu17i_C) C1{ Fi:7 Fi:17 Fc}



static void Test_BFu7i_BFu17i_C()
{
  {
    init_simple_test("BFu7i_BFu17i_C");
    static STRUCT_IF_C BFu7i_BFu17i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_C");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_C");
    check_field_offset(lv, v3, 3, "BFu7i_BFu17i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_C, BFu7i_BFu17i_C)
//============================================================================


struct  BFu7i_BFu17i_D  {
  unsigned int v1:7;
  unsigned int v2:17;
  double v3;
};
//SIG(1 BFu7i_BFu17i_D) C1{ Fi:7 Fi:17 FL}



static void Test_BFu7i_BFu17i_D()
{
  {
    init_simple_test("BFu7i_BFu17i_D");
    static STRUCT_IF_C BFu7i_BFu17i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu17i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_D");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_D, BFu7i_BFu17i_D)
//============================================================================


struct  BFu7i_BFu17i_F  {
  unsigned int v1:7;
  unsigned int v2:17;
  float v3;
};
//SIG(1 BFu7i_BFu17i_F) C1{ Fi:7 Fi:17 Fi}



static void Test_BFu7i_BFu17i_F()
{
  {
    init_simple_test("BFu7i_BFu17i_F");
    static STRUCT_IF_C BFu7i_BFu17i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_F");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_F, BFu7i_BFu17i_F)
//============================================================================


struct  BFu7i_BFu17i_I  {
  unsigned int v1:7;
  unsigned int v2:17;
  int v3;
};
//SIG(1 BFu7i_BFu17i_I) C1{ Fi:7 Fi:17 Fi}



static void Test_BFu7i_BFu17i_I()
{
  {
    init_simple_test("BFu7i_BFu17i_I");
    static STRUCT_IF_C BFu7i_BFu17i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_I");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_I, BFu7i_BFu17i_I)
//============================================================================


struct  BFu7i_BFu17i_Ip  {
  unsigned int v1:7;
  unsigned int v2:17;
  int *v3;
};
//SIG(1 BFu7i_BFu17i_Ip) C1{ Fi:7 Fi:17 Fp}



static void Test_BFu7i_BFu17i_Ip()
{
  {
    init_simple_test("BFu7i_BFu17i_Ip");
    static STRUCT_IF_C BFu7i_BFu17i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu17i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_Ip, BFu7i_BFu17i_Ip)
//============================================================================


struct  BFu7i_BFu17i_L  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu17i_L) C1{ Fi:7 Fi:17 FL}



static void Test_BFu7i_BFu17i_L()
{
  {
    init_simple_test("BFu7i_BFu17i_L");
    static STRUCT_IF_C BFu7i_BFu17i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu17i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_L");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_L, BFu7i_BFu17i_L)
//============================================================================


struct  BFu7i_BFu17i_S  {
  unsigned int v1:7;
  unsigned int v2:17;
  short v3;
};
//SIG(1 BFu7i_BFu17i_S) C1{ Fi:7 Fi:17 Fs}



static void Test_BFu7i_BFu17i_S()
{
  {
    init_simple_test("BFu7i_BFu17i_S");
    static STRUCT_IF_C BFu7i_BFu17i_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_S");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_S");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_S, BFu7i_BFu17i_S)
//============================================================================


struct  BFu7i_BFu17i_Uc  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu17i_Uc) C1{ Fi:7 Fi:17 Fc}



static void Test_BFu7i_BFu17i_Uc()
{
  {
    init_simple_test("BFu7i_BFu17i_Uc");
    static STRUCT_IF_C BFu7i_BFu17i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu17i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_Uc");
    check_field_offset(lv, v3, 3, "BFu7i_BFu17i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_Uc, BFu7i_BFu17i_Uc)
//============================================================================


struct  BFu7i_BFu17i_Ui  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu17i_Ui) C1{ Fi:7 Fi:17 Fi}



static void Test_BFu7i_BFu17i_Ui()
{
  {
    init_simple_test("BFu7i_BFu17i_Ui");
    static STRUCT_IF_C BFu7i_BFu17i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_Ui, BFu7i_BFu17i_Ui)
//============================================================================


struct  BFu7i_BFu17i_Ul  {
  unsigned int v1:7;
  unsigned int v2:17;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu17i_Ul) C1{ Fi:7 Fi:17 FL}



static void Test_BFu7i_BFu17i_Ul()
{
  {
    init_simple_test("BFu7i_BFu17i_Ul");
    static STRUCT_IF_C BFu7i_BFu17i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu17i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_Ul, BFu7i_BFu17i_Ul)
//============================================================================


struct  BFu7i_BFu17i_Us  {
  unsigned int v1:7;
  unsigned int v2:17;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu17i_Us) C1{ Fi:7 Fi:17 Fs}



static void Test_BFu7i_BFu17i_Us()
{
  {
    init_simple_test("BFu7i_BFu17i_Us");
    static STRUCT_IF_C BFu7i_BFu17i_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu17i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_Us");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_Us, BFu7i_BFu17i_Us)
//============================================================================


struct  BFu7i_BFu17i_Vp  {
  unsigned int v1:7;
  unsigned int v2:17;
  void *v3;
};
//SIG(1 BFu7i_BFu17i_Vp) C1{ Fi:7 Fi:17 Fp}



static void Test_BFu7i_BFu17i_Vp()
{
  {
    init_simple_test("BFu7i_BFu17i_Vp");
    static STRUCT_IF_C BFu7i_BFu17i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu17i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17i_Vp, BFu7i_BFu17i_Vp)
//============================================================================


struct  BFu7i_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
};
//SIG(1 BFu7i_BFu17ll) C1{ Fi:7 FL:17}



static void Test_BFu7i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll, BFu7i_BFu17ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu17ll_BFu15i) C1{ Fi:7 FL:17 Fi:15}



static void Test_BFu7i_BFu17ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu15i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu17ll_BFu15i");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu17ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu15i, BFu7i_BFu17ll_BFu15i)
//============================================================================


struct  BFu7i_BFu17ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu17ll_BFu15ll) C1{ Fi:7 FL:17 FL:15}



static void Test_BFu7i_BFu17ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu15ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, 1, "BFu7i_BFu17ll_BFu15ll");
    set_bf_and_test(lv, v3, 3, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu17ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu15ll, BFu7i_BFu17ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu17ll_BFu15s) C1{ Fi:7 FL:17 Fs:15}



static void Test_BFu7i_BFu17ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu15s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, 1, "BFu7i_BFu17ll_BFu15s");
    set_bf_and_test(lv, v3, 4, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu17ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu15s, BFu7i_BFu17ll_BFu15s)
//============================================================================


struct  BFu7i_BFu17ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu17ll_BFu16i) C1{ Fi:7 FL:17 Fi:16}



static void Test_BFu7i_BFu17ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu16i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu17ll_BFu16i");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu17ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu16i, BFu7i_BFu17ll_BFu16i)
//============================================================================


struct  BFu7i_BFu17ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu17ll_BFu16ll) C1{ Fi:7 FL:17 FL:16}



static void Test_BFu7i_BFu17ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu16ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, 1, "BFu7i_BFu17ll_BFu16ll");
    set_bf_and_test(lv, v3, 3, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu17ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu16ll, BFu7i_BFu17ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu17ll_BFu16s) C1{ Fi:7 FL:17 Fs:16}



static void Test_BFu7i_BFu17ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu16s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, 1, "BFu7i_BFu17ll_BFu16s");
    set_bf_and_test(lv, v3, 4, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu17ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu16s, BFu7i_BFu17ll_BFu16s)
//============================================================================


struct  BFu7i_BFu17ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu17ll_BFu17i) C1{ Fi:7 FL:17 Fi:17}



static void Test_BFu7i_BFu17ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu17i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, 1, "BFu7i_BFu17ll_BFu17i");
    set_bf_and_test(lv, v3, 4, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu17i, BFu7i_BFu17ll_BFu17i)
//============================================================================


struct  BFu7i_BFu17ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu17ll_BFu17ll) C1{ Fi:7 FL:17 FL:17}



static void Test_BFu7i_BFu17ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu17ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, 1, "BFu7i_BFu17ll_BFu17ll");
    set_bf_and_test(lv, v3, 3, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu17ll, BFu7i_BFu17ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu17ll_BFu1c) C1{ Fi:7 FL:17 Fc:1}



static void Test_BFu7i_BFu17ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu1c");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7i_BFu17ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu1c, BFu7i_BFu17ll_BFu1c)
//============================================================================


struct  BFu7i_BFu17ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu17ll_BFu1i) C1{ Fi:7 FL:17 Fi:1}



static void Test_BFu7i_BFu17ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu1i");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7i_BFu17ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu1i, BFu7i_BFu17ll_BFu1i)
//============================================================================


struct  BFu7i_BFu17ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu17ll_BFu1ll) C1{ Fi:7 FL:17 FL:1}



static void Test_BFu7i_BFu17ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu1ll");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7i_BFu17ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu1ll, BFu7i_BFu17ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu17ll_BFu1s) C1{ Fi:7 FL:17 Fs:1}



static void Test_BFu7i_BFu17ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu1s");
    set_bf_and_test(lv, v3, 3, 0, 1, 1, "BFu7i_BFu17ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu1s, BFu7i_BFu17ll_BFu1s)
//============================================================================


struct  BFu7i_BFu17ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu17ll_BFu31i) C1{ Fi:7 FL:17 Fi:31}



static void Test_BFu7i_BFu17ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu17ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu17ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu31i, BFu7i_BFu17ll_BFu31i)
//============================================================================


struct  BFu7i_BFu17ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu17ll_BFu31ll) C1{ Fi:7 FL:17 FL:31}



static void Test_BFu7i_BFu17ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, 1, "BFu7i_BFu17ll_BFu31ll");
    set_bf_and_test(lv, v3, 3, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu17ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu31ll, BFu7i_BFu17ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu17ll_BFu32i) C1{ Fi:7 FL:17 Fi:32}



static void Test_BFu7i_BFu17ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu17ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu17ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu32i, BFu7i_BFu17ll_BFu32i)
//============================================================================


struct  BFu7i_BFu17ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu17ll_BFu32ll) C1{ Fi:7 FL:17 FL:32}



static void Test_BFu7i_BFu17ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, 1, "BFu7i_BFu17ll_BFu32ll");
    set_bf_and_test(lv, v3, 3, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu17ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu32ll, BFu7i_BFu17ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu17ll_BFu33) C1{ Fi:7 FL:17 FL:33}



static void Test_BFu7i_BFu17ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, 1, "BFu7i_BFu17ll_BFu33");
    set_bf_and_test(lv, v3, 3, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu17ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu33, BFu7i_BFu17ll_BFu33)
//============================================================================


struct  BFu7i_BFu17ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu17ll_BFu7c) C1{ Fi:7 FL:17 Fc:7}



static void Test_BFu7i_BFu17ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu17ll_BFu7c");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu7c, BFu7i_BFu17ll_BFu7c)
//============================================================================


struct  BFu7i_BFu17ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu17ll_BFu7i) C1{ Fi:7 FL:17 Fi:7}



static void Test_BFu7i_BFu17ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu17ll_BFu7i");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu7i, BFu7i_BFu17ll_BFu7i)
//============================================================================


struct  BFu7i_BFu17ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu17ll_BFu7ll) C1{ Fi:7 FL:17 FL:7}



static void Test_BFu7i_BFu17ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu17ll_BFu7ll");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu7ll, BFu7i_BFu17ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu17ll_BFu7s) C1{ Fi:7 FL:17 Fs:7}



static void Test_BFu7i_BFu17ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, 1, "BFu7i_BFu17ll_BFu7s");
    set_bf_and_test(lv, v3, 3, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu7s, BFu7i_BFu17ll_BFu7s)
//============================================================================


struct  BFu7i_BFu17ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu17ll_BFu8c) C1{ Fi:7 FL:17 Fc:8}



static void Test_BFu7i_BFu17ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu17ll_BFu8c");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu17ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu8c, BFu7i_BFu17ll_BFu8c)
//============================================================================


struct  BFu7i_BFu17ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu17ll_BFu8i) C1{ Fi:7 FL:17 Fi:8}



static void Test_BFu7i_BFu17ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu17ll_BFu8i");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu17ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu8i, BFu7i_BFu17ll_BFu8i)
//============================================================================


struct  BFu7i_BFu17ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu17ll_BFu8ll) C1{ Fi:7 FL:17 FL:8}



static void Test_BFu7i_BFu17ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu17ll_BFu8ll");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu17ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu8ll, BFu7i_BFu17ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu17ll_BFu8s) C1{ Fi:7 FL:17 Fs:8}



static void Test_BFu7i_BFu17ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, 1, "BFu7i_BFu17ll_BFu8s");
    set_bf_and_test(lv, v3, 3, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu17ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu8s, BFu7i_BFu17ll_BFu8s)
//============================================================================


struct  BFu7i_BFu17ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu17ll_BFu9i) C1{ Fi:7 FL:17 Fi:9}



static void Test_BFu7i_BFu17ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu9i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu17ll_BFu9i");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu17ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu9i, BFu7i_BFu17ll_BFu9i)
//============================================================================


struct  BFu7i_BFu17ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu17ll_BFu9ll) C1{ Fi:7 FL:17 FL:9}



static void Test_BFu7i_BFu17ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu9ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, 1, "BFu7i_BFu17ll_BFu9ll");
    set_bf_and_test(lv, v3, 3, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu17ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu9ll, BFu7i_BFu17ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu17ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu17ll_BFu9s) C1{ Fi:7 FL:17 Fs:9}



static void Test_BFu7i_BFu17ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu17ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu17ll_BFu9s lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, 1, "BFu7i_BFu17ll_BFu9s");
    set_bf_and_test(lv, v3, 4, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu17ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_BFu9s, BFu7i_BFu17ll_BFu9s)
//============================================================================


struct  BFu7i_BFu17ll_C  {
  unsigned int v1:7;
  __tsu64 v2:17;
  char v3;
};
//SIG(1 BFu7i_BFu17ll_C) C1{ Fi:7 FL:17 Fc}



static void Test_BFu7i_BFu17ll_C()
{
  {
    init_simple_test("BFu7i_BFu17ll_C");
    static STRUCT_IF_C BFu7i_BFu17ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_C");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_C");
    check_field_offset(lv, v3, 3, "BFu7i_BFu17ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_C, BFu7i_BFu17ll_C)
//============================================================================


struct  BFu7i_BFu17ll_D  {
  unsigned int v1:7;
  __tsu64 v2:17;
  double v3;
};
//SIG(1 BFu7i_BFu17ll_D) C1{ Fi:7 FL:17 FL}



static void Test_BFu7i_BFu17ll_D()
{
  {
    init_simple_test("BFu7i_BFu17ll_D");
    static STRUCT_IF_C BFu7i_BFu17ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu17ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_D");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_D, BFu7i_BFu17ll_D)
//============================================================================


struct  BFu7i_BFu17ll_F  {
  unsigned int v1:7;
  __tsu64 v2:17;
  float v3;
};
//SIG(1 BFu7i_BFu17ll_F) C1{ Fi:7 FL:17 Fi}



static void Test_BFu7i_BFu17ll_F()
{
  {
    init_simple_test("BFu7i_BFu17ll_F");
    static STRUCT_IF_C BFu7i_BFu17ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_F");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_F, BFu7i_BFu17ll_F)
//============================================================================


struct  BFu7i_BFu17ll_I  {
  unsigned int v1:7;
  __tsu64 v2:17;
  int v3;
};
//SIG(1 BFu7i_BFu17ll_I) C1{ Fi:7 FL:17 Fi}



static void Test_BFu7i_BFu17ll_I()
{
  {
    init_simple_test("BFu7i_BFu17ll_I");
    static STRUCT_IF_C BFu7i_BFu17ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_I");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_I, BFu7i_BFu17ll_I)
//============================================================================


struct  BFu7i_BFu17ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:17;
  int *v3;
};
//SIG(1 BFu7i_BFu17ll_Ip) C1{ Fi:7 FL:17 Fp}



static void Test_BFu7i_BFu17ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu17ll_Ip");
    static STRUCT_IF_C BFu7i_BFu17ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu17ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_Ip, BFu7i_BFu17ll_Ip)
//============================================================================


struct  BFu7i_BFu17ll_L  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu17ll_L) C1{ Fi:7 FL:17 FL}



static void Test_BFu7i_BFu17ll_L()
{
  {
    init_simple_test("BFu7i_BFu17ll_L");
    static STRUCT_IF_C BFu7i_BFu17ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu17ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_L");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_L, BFu7i_BFu17ll_L)
//============================================================================


struct  BFu7i_BFu17ll_S  {
  unsigned int v1:7;
  __tsu64 v2:17;
  short v3;
};
//SIG(1 BFu7i_BFu17ll_S) C1{ Fi:7 FL:17 Fs}



static void Test_BFu7i_BFu17ll_S()
{
  {
    init_simple_test("BFu7i_BFu17ll_S");
    static STRUCT_IF_C BFu7i_BFu17ll_S lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_S");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_S");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_S, BFu7i_BFu17ll_S)
//============================================================================


struct  BFu7i_BFu17ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu17ll_Uc) C1{ Fi:7 FL:17 Fc}



static void Test_BFu7i_BFu17ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu17ll_Uc");
    static STRUCT_IF_C BFu7i_BFu17ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu17ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_Uc");
    check_field_offset(lv, v3, 3, "BFu7i_BFu17ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_Uc, BFu7i_BFu17ll_Uc)
//============================================================================


struct  BFu7i_BFu17ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu17ll_Ui) C1{ Fi:7 FL:17 Fi}



static void Test_BFu7i_BFu17ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu17ll_Ui");
    static STRUCT_IF_C BFu7i_BFu17ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_Ui, BFu7i_BFu17ll_Ui)
//============================================================================


struct  BFu7i_BFu17ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:17;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu17ll_Ul) C1{ Fi:7 FL:17 FL}



static void Test_BFu7i_BFu17ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu17ll_Ul");
    static STRUCT_IF_C BFu7i_BFu17ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu17ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_Ul, BFu7i_BFu17ll_Ul)
//============================================================================


struct  BFu7i_BFu17ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:17;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu17ll_Us) C1{ Fi:7 FL:17 Fs}



static void Test_BFu7i_BFu17ll_Us()
{
  {
    init_simple_test("BFu7i_BFu17ll_Us");
    static STRUCT_IF_C BFu7i_BFu17ll_Us lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu17ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_Us");
    check_field_offset(lv, v3, 4, "BFu7i_BFu17ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_Us, BFu7i_BFu17ll_Us)
//============================================================================


struct  BFu7i_BFu17ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:17;
  void *v3;
};
//SIG(1 BFu7i_BFu17ll_Vp) C1{ Fi:7 FL:17 Fp}



static void Test_BFu7i_BFu17ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu17ll_Vp");
    static STRUCT_IF_C BFu7i_BFu17ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu17ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu17ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu17ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, 1, "BFu7i_BFu17ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 17, hide_ull(1LL<<16), "BFu7i_BFu17ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu17ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu17ll_Vp, BFu7i_BFu17ll_Vp)
//============================================================================


struct  BFu7i_BFu1c  {
  unsigned int v1:7;
  unsigned char v2:1;
};
//SIG(1 BFu7i_BFu1c) C1{ Fi:7 Fc:1}



static void Test_BFu7i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c, BFu7i_BFu1c)
//============================================================================


struct  BFu7i_BFu1c_BFu15i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu1c_BFu15i) C1{ Fi:7 Fc:1 Fi:15}



static void Test_BFu7i_BFu1c_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu15i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7i_BFu1c_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1c_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu15i, BFu7i_BFu1c_BFu15i)
//============================================================================


struct  BFu7i_BFu1c_BFu15ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu1c_BFu15ll) C1{ Fi:7 Fc:1 FL:15}



static void Test_BFu7i_BFu1c_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1c_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7i_BFu1c_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1c_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu15ll, BFu7i_BFu1c_BFu15ll)
//============================================================================


struct  BFu7i_BFu1c_BFu15s  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu1c_BFu15s) C1{ Fi:7 Fc:1 Fs:15}



static void Test_BFu7i_BFu1c_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu15s");
    static STRUCT_IF_C BFu7i_BFu1c_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu1c_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1c_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu15s, BFu7i_BFu1c_BFu15s)
//============================================================================


struct  BFu7i_BFu1c_BFu16i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu1c_BFu16i) C1{ Fi:7 Fc:1 Fi:16}



static void Test_BFu7i_BFu1c_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu16i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7i_BFu1c_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1c_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu16i, BFu7i_BFu1c_BFu16i)
//============================================================================


struct  BFu7i_BFu1c_BFu16ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu1c_BFu16ll) C1{ Fi:7 Fc:1 FL:16}



static void Test_BFu7i_BFu1c_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1c_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7i_BFu1c_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1c_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu16ll, BFu7i_BFu1c_BFu16ll)
//============================================================================


struct  BFu7i_BFu1c_BFu16s  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu1c_BFu16s) C1{ Fi:7 Fc:1 Fs:16}



static void Test_BFu7i_BFu1c_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu16s");
    static STRUCT_IF_C BFu7i_BFu1c_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu1c_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1c_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu16s, BFu7i_BFu1c_BFu16s)
//============================================================================


struct  BFu7i_BFu1c_BFu17i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu1c_BFu17i) C1{ Fi:7 Fc:1 Fi:17}



static void Test_BFu7i_BFu1c_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu17i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7i_BFu1c_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu1c_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu17i, BFu7i_BFu1c_BFu17i)
//============================================================================


struct  BFu7i_BFu1c_BFu17ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu1c_BFu17ll) C1{ Fi:7 Fc:1 FL:17}



static void Test_BFu7i_BFu1c_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1c_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7i_BFu1c_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu1c_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu17ll, BFu7i_BFu1c_BFu17ll)
//============================================================================


struct  BFu7i_BFu1c_BFu1c  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu1c_BFu1c) C1{ Fi:7 Fc:1 Fc:1}



static void Test_BFu7i_BFu1c_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu1c");
    static STRUCT_IF_C BFu7i_BFu1c_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1c_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu1c, BFu7i_BFu1c_BFu1c)
//============================================================================


struct  BFu7i_BFu1c_BFu1i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu1c_BFu1i) C1{ Fi:7 Fc:1 Fi:1}



static void Test_BFu7i_BFu1c_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu1i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1c_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu1i, BFu7i_BFu1c_BFu1i)
//============================================================================


struct  BFu7i_BFu1c_BFu1ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu1c_BFu1ll) C1{ Fi:7 Fc:1 FL:1}



static void Test_BFu7i_BFu1c_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1c_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1c_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu1ll, BFu7i_BFu1c_BFu1ll)
//============================================================================


struct  BFu7i_BFu1c_BFu1s  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu1c_BFu1s) C1{ Fi:7 Fc:1 Fs:1}



static void Test_BFu7i_BFu1c_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu1s");
    static STRUCT_IF_C BFu7i_BFu1c_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1c_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu1s, BFu7i_BFu1c_BFu1s)
//============================================================================


struct  BFu7i_BFu1c_BFu31i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu1c_BFu31i) C1{ Fi:7 Fc:1 Fi:31}



static void Test_BFu7i_BFu1c_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu31i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1c_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu1c_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu1c_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu31i, BFu7i_BFu1c_BFu31i)
//============================================================================


struct  BFu7i_BFu1c_BFu31ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu1c_BFu31ll) C1{ Fi:7 Fc:1 FL:31}



static void Test_BFu7i_BFu1c_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1c_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7i_BFu1c_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu1c_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu31ll, BFu7i_BFu1c_BFu31ll)
//============================================================================


struct  BFu7i_BFu1c_BFu32i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu1c_BFu32i) C1{ Fi:7 Fc:1 Fi:32}



static void Test_BFu7i_BFu1c_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu32i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1c_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu1c_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu1c_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu32i, BFu7i_BFu1c_BFu32i)
//============================================================================


struct  BFu7i_BFu1c_BFu32ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu1c_BFu32ll) C1{ Fi:7 Fc:1 FL:32}



static void Test_BFu7i_BFu1c_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1c_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7i_BFu1c_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu1c_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu32ll, BFu7i_BFu1c_BFu32ll)
//============================================================================


struct  BFu7i_BFu1c_BFu33  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu1c_BFu33) C1{ Fi:7 Fc:1 FL:33}



static void Test_BFu7i_BFu1c_BFu33()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu33");
    static STRUCT_IF_C BFu7i_BFu1c_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1c_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7i_BFu1c_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu1c_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu33, BFu7i_BFu1c_BFu33)
//============================================================================


struct  BFu7i_BFu1c_BFu7c  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu1c_BFu7c) C1{ Fi:7 Fc:1 Fc:7}



static void Test_BFu7i_BFu1c_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu7c");
    static STRUCT_IF_C BFu7i_BFu1c_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1c_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu7c, BFu7i_BFu1c_BFu7c)
//============================================================================


struct  BFu7i_BFu1c_BFu7i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu1c_BFu7i) C1{ Fi:7 Fc:1 Fi:7}



static void Test_BFu7i_BFu1c_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu7i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1c_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu7i, BFu7i_BFu1c_BFu7i)
//============================================================================


struct  BFu7i_BFu1c_BFu7ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu1c_BFu7ll) C1{ Fi:7 Fc:1 FL:7}



static void Test_BFu7i_BFu1c_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1c_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1c_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu7ll, BFu7i_BFu1c_BFu7ll)
//============================================================================


struct  BFu7i_BFu1c_BFu7s  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu1c_BFu7s) C1{ Fi:7 Fc:1 Fs:7}



static void Test_BFu7i_BFu1c_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu7s");
    static STRUCT_IF_C BFu7i_BFu1c_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1c_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu7s, BFu7i_BFu1c_BFu7s)
//============================================================================


struct  BFu7i_BFu1c_BFu8c  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu1c_BFu8c) C1{ Fi:7 Fc:1 Fc:8}



static void Test_BFu7i_BFu1c_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu8c");
    static STRUCT_IF_C BFu7i_BFu1c_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1c_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1c_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu8c, BFu7i_BFu1c_BFu8c)
//============================================================================


struct  BFu7i_BFu1c_BFu8i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu1c_BFu8i) C1{ Fi:7 Fc:1 Fi:8}



static void Test_BFu7i_BFu1c_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu8i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1c_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1c_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu8i, BFu7i_BFu1c_BFu8i)
//============================================================================


struct  BFu7i_BFu1c_BFu8ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu1c_BFu8ll) C1{ Fi:7 Fc:1 FL:8}



static void Test_BFu7i_BFu1c_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1c_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1c_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1c_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu8ll, BFu7i_BFu1c_BFu8ll)
//============================================================================


struct  BFu7i_BFu1c_BFu8s  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu1c_BFu8s) C1{ Fi:7 Fc:1 Fs:8}



static void Test_BFu7i_BFu1c_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu8s");
    static STRUCT_IF_C BFu7i_BFu1c_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1c_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1c_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu8s, BFu7i_BFu1c_BFu8s)
//============================================================================


struct  BFu7i_BFu1c_BFu9i  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu1c_BFu9i) C1{ Fi:7 Fc:1 Fi:9}



static void Test_BFu7i_BFu1c_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu9i");
    static STRUCT_IF_C BFu7i_BFu1c_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7i_BFu1c_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1c_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu9i, BFu7i_BFu1c_BFu9i)
//============================================================================


struct  BFu7i_BFu1c_BFu9ll  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu1c_BFu9ll) C1{ Fi:7 Fc:1 FL:9}



static void Test_BFu7i_BFu1c_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu1c_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1c_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7i_BFu1c_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1c_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu9ll, BFu7i_BFu1c_BFu9ll)
//============================================================================


struct  BFu7i_BFu1c_BFu9s  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu1c_BFu9s) C1{ Fi:7 Fc:1 Fs:9}



static void Test_BFu7i_BFu1c_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu1c_BFu9s");
    static STRUCT_IF_C BFu7i_BFu1c_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu1c_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1c_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_BFu9s, BFu7i_BFu1c_BFu9s)
//============================================================================


struct  BFu7i_BFu1c_C  {
  unsigned int v1:7;
  unsigned char v2:1;
  char v3;
};
//SIG(1 BFu7i_BFu1c_C) C1{ Fi:7 Fc:1 Fc}



static void Test_BFu7i_BFu1c_C()
{
  {
    init_simple_test("BFu7i_BFu1c_C");
    static STRUCT_IF_C BFu7i_BFu1c_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_C");
    check_field_offset(lv, v3, 1, "BFu7i_BFu1c_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_C, BFu7i_BFu1c_C)
//============================================================================


struct  BFu7i_BFu1c_D  {
  unsigned int v1:7;
  unsigned char v2:1;
  double v3;
};
//SIG(1 BFu7i_BFu1c_D) C1{ Fi:7 Fc:1 FL}



static void Test_BFu7i_BFu1c_D()
{
  {
    init_simple_test("BFu7i_BFu1c_D");
    static STRUCT_IF_C BFu7i_BFu1c_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1c_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1c_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_D, BFu7i_BFu1c_D)
//============================================================================


struct  BFu7i_BFu1c_F  {
  unsigned int v1:7;
  unsigned char v2:1;
  float v3;
};
//SIG(1 BFu7i_BFu1c_F) C1{ Fi:7 Fc:1 Fi}



static void Test_BFu7i_BFu1c_F()
{
  {
    init_simple_test("BFu7i_BFu1c_F");
    static STRUCT_IF_C BFu7i_BFu1c_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1c_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1c_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_F, BFu7i_BFu1c_F)
//============================================================================


struct  BFu7i_BFu1c_I  {
  unsigned int v1:7;
  unsigned char v2:1;
  int v3;
};
//SIG(1 BFu7i_BFu1c_I) C1{ Fi:7 Fc:1 Fi}



static void Test_BFu7i_BFu1c_I()
{
  {
    init_simple_test("BFu7i_BFu1c_I");
    static STRUCT_IF_C BFu7i_BFu1c_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1c_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1c_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_I, BFu7i_BFu1c_I)
//============================================================================


struct  BFu7i_BFu1c_Ip  {
  unsigned int v1:7;
  unsigned char v2:1;
  int *v3;
};
//SIG(1 BFu7i_BFu1c_Ip) C1{ Fi:7 Fc:1 Fp}



static void Test_BFu7i_BFu1c_Ip()
{
  {
    init_simple_test("BFu7i_BFu1c_Ip");
    static STRUCT_IF_C BFu7i_BFu1c_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu1c_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1c_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_Ip, BFu7i_BFu1c_Ip)
//============================================================================


struct  BFu7i_BFu1c_L  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu1c_L) C1{ Fi:7 Fc:1 FL}



static void Test_BFu7i_BFu1c_L()
{
  {
    init_simple_test("BFu7i_BFu1c_L");
    static STRUCT_IF_C BFu7i_BFu1c_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1c_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1c_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_L, BFu7i_BFu1c_L)
//============================================================================


struct  BFu7i_BFu1c_S  {
  unsigned int v1:7;
  unsigned char v2:1;
  short v3;
};
//SIG(1 BFu7i_BFu1c_S) C1{ Fi:7 Fc:1 Fs}



static void Test_BFu7i_BFu1c_S()
{
  {
    init_simple_test("BFu7i_BFu1c_S");
    static STRUCT_IF_C BFu7i_BFu1c_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu1c_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_S, BFu7i_BFu1c_S)
//============================================================================


struct  BFu7i_BFu1c_Uc  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu1c_Uc) C1{ Fi:7 Fc:1 Fc}



static void Test_BFu7i_BFu1c_Uc()
{
  {
    init_simple_test("BFu7i_BFu1c_Uc");
    static STRUCT_IF_C BFu7i_BFu1c_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_Uc");
    check_field_offset(lv, v3, 1, "BFu7i_BFu1c_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_Uc, BFu7i_BFu1c_Uc)
//============================================================================


struct  BFu7i_BFu1c_Ui  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu1c_Ui) C1{ Fi:7 Fc:1 Fi}



static void Test_BFu7i_BFu1c_Ui()
{
  {
    init_simple_test("BFu7i_BFu1c_Ui");
    static STRUCT_IF_C BFu7i_BFu1c_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1c_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1c_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_Ui, BFu7i_BFu1c_Ui)
//============================================================================


struct  BFu7i_BFu1c_Ul  {
  unsigned int v1:7;
  unsigned char v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu1c_Ul) C1{ Fi:7 Fc:1 FL}



static void Test_BFu7i_BFu1c_Ul()
{
  {
    init_simple_test("BFu7i_BFu1c_Ul");
    static STRUCT_IF_C BFu7i_BFu1c_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1c_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1c_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_Ul, BFu7i_BFu1c_Ul)
//============================================================================


struct  BFu7i_BFu1c_Us  {
  unsigned int v1:7;
  unsigned char v2:1;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu1c_Us) C1{ Fi:7 Fc:1 Fs}



static void Test_BFu7i_BFu1c_Us()
{
  {
    init_simple_test("BFu7i_BFu1c_Us");
    static STRUCT_IF_C BFu7i_BFu1c_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1c_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1c_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu1c_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_Us, BFu7i_BFu1c_Us)
//============================================================================


struct  BFu7i_BFu1c_Vp  {
  unsigned int v1:7;
  unsigned char v2:1;
  void *v3;
};
//SIG(1 BFu7i_BFu1c_Vp) C1{ Fi:7 Fc:1 Fp}



static void Test_BFu7i_BFu1c_Vp()
{
  {
    init_simple_test("BFu7i_BFu1c_Vp");
    static STRUCT_IF_C BFu7i_BFu1c_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu1c_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1c_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1c_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1c_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1c_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1c_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1c_Vp, BFu7i_BFu1c_Vp)
//============================================================================


struct  BFu7i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:1;
};
//SIG(1 BFu7i_BFu1i) C1{ Fi:7 Fi:1}



static void Test_BFu7i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i, BFu7i_BFu1i)
//============================================================================


struct  BFu7i_BFu1i_BFu15i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu1i_BFu15i) C1{ Fi:7 Fi:1 Fi:15}



static void Test_BFu7i_BFu1i_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu15i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7i_BFu1i_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1i_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu15i, BFu7i_BFu1i_BFu15i)
//============================================================================


struct  BFu7i_BFu1i_BFu15ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu1i_BFu15ll) C1{ Fi:7 Fi:1 FL:15}



static void Test_BFu7i_BFu1i_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1i_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7i_BFu1i_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1i_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu15ll, BFu7i_BFu1i_BFu15ll)
//============================================================================


struct  BFu7i_BFu1i_BFu15s  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu1i_BFu15s) C1{ Fi:7 Fi:1 Fs:15}



static void Test_BFu7i_BFu1i_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu15s");
    static STRUCT_IF_C BFu7i_BFu1i_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu1i_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1i_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu15s, BFu7i_BFu1i_BFu15s)
//============================================================================


struct  BFu7i_BFu1i_BFu16i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu1i_BFu16i) C1{ Fi:7 Fi:1 Fi:16}



static void Test_BFu7i_BFu1i_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu16i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7i_BFu1i_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1i_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu16i, BFu7i_BFu1i_BFu16i)
//============================================================================


struct  BFu7i_BFu1i_BFu16ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu1i_BFu16ll) C1{ Fi:7 Fi:1 FL:16}



static void Test_BFu7i_BFu1i_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1i_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7i_BFu1i_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1i_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu16ll, BFu7i_BFu1i_BFu16ll)
//============================================================================


struct  BFu7i_BFu1i_BFu16s  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu1i_BFu16s) C1{ Fi:7 Fi:1 Fs:16}



static void Test_BFu7i_BFu1i_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu16s");
    static STRUCT_IF_C BFu7i_BFu1i_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu1i_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1i_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu16s, BFu7i_BFu1i_BFu16s)
//============================================================================


struct  BFu7i_BFu1i_BFu17i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu1i_BFu17i) C1{ Fi:7 Fi:1 Fi:17}



static void Test_BFu7i_BFu1i_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu17i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7i_BFu1i_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu1i_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu17i, BFu7i_BFu1i_BFu17i)
//============================================================================


struct  BFu7i_BFu1i_BFu17ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu1i_BFu17ll) C1{ Fi:7 Fi:1 FL:17}



static void Test_BFu7i_BFu1i_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1i_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7i_BFu1i_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu1i_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu17ll, BFu7i_BFu1i_BFu17ll)
//============================================================================


struct  BFu7i_BFu1i_BFu1c  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu1i_BFu1c) C1{ Fi:7 Fi:1 Fc:1}



static void Test_BFu7i_BFu1i_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu1c");
    static STRUCT_IF_C BFu7i_BFu1i_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1i_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu1c, BFu7i_BFu1i_BFu1c)
//============================================================================


struct  BFu7i_BFu1i_BFu1i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu1i_BFu1i) C1{ Fi:7 Fi:1 Fi:1}



static void Test_BFu7i_BFu1i_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu1i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1i_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu1i, BFu7i_BFu1i_BFu1i)
//============================================================================


struct  BFu7i_BFu1i_BFu1ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu1i_BFu1ll) C1{ Fi:7 Fi:1 FL:1}



static void Test_BFu7i_BFu1i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu1ll, BFu7i_BFu1i_BFu1ll)
//============================================================================


struct  BFu7i_BFu1i_BFu1s  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu1i_BFu1s) C1{ Fi:7 Fi:1 Fs:1}



static void Test_BFu7i_BFu1i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu1i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu1s, BFu7i_BFu1i_BFu1s)
//============================================================================


struct  BFu7i_BFu1i_BFu31i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu1i_BFu31i) C1{ Fi:7 Fi:1 Fi:31}



static void Test_BFu7i_BFu1i_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu31i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1i_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu1i_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu1i_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu31i, BFu7i_BFu1i_BFu31i)
//============================================================================


struct  BFu7i_BFu1i_BFu31ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu1i_BFu31ll) C1{ Fi:7 Fi:1 FL:31}



static void Test_BFu7i_BFu1i_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1i_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7i_BFu1i_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu1i_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu31ll, BFu7i_BFu1i_BFu31ll)
//============================================================================


struct  BFu7i_BFu1i_BFu32i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu1i_BFu32i) C1{ Fi:7 Fi:1 Fi:32}



static void Test_BFu7i_BFu1i_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu32i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1i_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu1i_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu1i_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu32i, BFu7i_BFu1i_BFu32i)
//============================================================================


struct  BFu7i_BFu1i_BFu32ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu1i_BFu32ll) C1{ Fi:7 Fi:1 FL:32}



static void Test_BFu7i_BFu1i_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1i_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7i_BFu1i_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu1i_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu32ll, BFu7i_BFu1i_BFu32ll)
//============================================================================


struct  BFu7i_BFu1i_BFu33  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu1i_BFu33) C1{ Fi:7 Fi:1 FL:33}



static void Test_BFu7i_BFu1i_BFu33()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu33");
    static STRUCT_IF_C BFu7i_BFu1i_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1i_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7i_BFu1i_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu1i_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu33, BFu7i_BFu1i_BFu33)
//============================================================================


struct  BFu7i_BFu1i_BFu7c  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu1i_BFu7c) C1{ Fi:7 Fi:1 Fc:7}



static void Test_BFu7i_BFu1i_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu7c");
    static STRUCT_IF_C BFu7i_BFu1i_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1i_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu7c, BFu7i_BFu1i_BFu7c)
//============================================================================


struct  BFu7i_BFu1i_BFu7i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu1i_BFu7i) C1{ Fi:7 Fi:1 Fi:7}



static void Test_BFu7i_BFu1i_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu7i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1i_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu7i, BFu7i_BFu1i_BFu7i)
//============================================================================


struct  BFu7i_BFu1i_BFu7ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu1i_BFu7ll) C1{ Fi:7 Fi:1 FL:7}



static void Test_BFu7i_BFu1i_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1i_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1i_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu7ll, BFu7i_BFu1i_BFu7ll)
//============================================================================


struct  BFu7i_BFu1i_BFu7s  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu1i_BFu7s) C1{ Fi:7 Fi:1 Fs:7}



static void Test_BFu7i_BFu1i_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu7s");
    static STRUCT_IF_C BFu7i_BFu1i_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1i_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu7s, BFu7i_BFu1i_BFu7s)
//============================================================================


struct  BFu7i_BFu1i_BFu8c  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu1i_BFu8c) C1{ Fi:7 Fi:1 Fc:8}



static void Test_BFu7i_BFu1i_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu8c");
    static STRUCT_IF_C BFu7i_BFu1i_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1i_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1i_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu8c, BFu7i_BFu1i_BFu8c)
//============================================================================


struct  BFu7i_BFu1i_BFu8i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu1i_BFu8i) C1{ Fi:7 Fi:1 Fi:8}



static void Test_BFu7i_BFu1i_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu8i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1i_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1i_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu8i, BFu7i_BFu1i_BFu8i)
//============================================================================


struct  BFu7i_BFu1i_BFu8ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu1i_BFu8ll) C1{ Fi:7 Fi:1 FL:8}



static void Test_BFu7i_BFu1i_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1i_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1i_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1i_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu8ll, BFu7i_BFu1i_BFu8ll)
//============================================================================


struct  BFu7i_BFu1i_BFu8s  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu1i_BFu8s) C1{ Fi:7 Fi:1 Fs:8}



static void Test_BFu7i_BFu1i_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu8s");
    static STRUCT_IF_C BFu7i_BFu1i_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1i_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1i_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu8s, BFu7i_BFu1i_BFu8s)
//============================================================================


struct  BFu7i_BFu1i_BFu9i  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu1i_BFu9i) C1{ Fi:7 Fi:1 Fi:9}



static void Test_BFu7i_BFu1i_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu9i");
    static STRUCT_IF_C BFu7i_BFu1i_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7i_BFu1i_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1i_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu9i, BFu7i_BFu1i_BFu9i)
//============================================================================


struct  BFu7i_BFu1i_BFu9ll  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu1i_BFu9ll) C1{ Fi:7 Fi:1 FL:9}



static void Test_BFu7i_BFu1i_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu1i_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1i_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7i_BFu1i_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1i_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu9ll, BFu7i_BFu1i_BFu9ll)
//============================================================================


struct  BFu7i_BFu1i_BFu9s  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu1i_BFu9s) C1{ Fi:7 Fi:1 Fs:9}



static void Test_BFu7i_BFu1i_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu1i_BFu9s");
    static STRUCT_IF_C BFu7i_BFu1i_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu1i_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1i_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_BFu9s, BFu7i_BFu1i_BFu9s)
//============================================================================


struct  BFu7i_BFu1i_C  {
  unsigned int v1:7;
  unsigned int v2:1;
  char v3;
};
//SIG(1 BFu7i_BFu1i_C) C1{ Fi:7 Fi:1 Fc}



static void Test_BFu7i_BFu1i_C()
{
  {
    init_simple_test("BFu7i_BFu1i_C");
    static STRUCT_IF_C BFu7i_BFu1i_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_C");
    check_field_offset(lv, v3, 1, "BFu7i_BFu1i_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_C, BFu7i_BFu1i_C)
//============================================================================


struct  BFu7i_BFu1i_D  {
  unsigned int v1:7;
  unsigned int v2:1;
  double v3;
};
//SIG(1 BFu7i_BFu1i_D) C1{ Fi:7 Fi:1 FL}



static void Test_BFu7i_BFu1i_D()
{
  {
    init_simple_test("BFu7i_BFu1i_D");
    static STRUCT_IF_C BFu7i_BFu1i_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1i_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1i_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_D, BFu7i_BFu1i_D)
//============================================================================


struct  BFu7i_BFu1i_F  {
  unsigned int v1:7;
  unsigned int v2:1;
  float v3;
};
//SIG(1 BFu7i_BFu1i_F) C1{ Fi:7 Fi:1 Fi}



static void Test_BFu7i_BFu1i_F()
{
  {
    init_simple_test("BFu7i_BFu1i_F");
    static STRUCT_IF_C BFu7i_BFu1i_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1i_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1i_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_F, BFu7i_BFu1i_F)
//============================================================================


struct  BFu7i_BFu1i_I  {
  unsigned int v1:7;
  unsigned int v2:1;
  int v3;
};
//SIG(1 BFu7i_BFu1i_I) C1{ Fi:7 Fi:1 Fi}



static void Test_BFu7i_BFu1i_I()
{
  {
    init_simple_test("BFu7i_BFu1i_I");
    static STRUCT_IF_C BFu7i_BFu1i_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1i_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1i_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_I, BFu7i_BFu1i_I)
//============================================================================


struct  BFu7i_BFu1i_Ip  {
  unsigned int v1:7;
  unsigned int v2:1;
  int *v3;
};
//SIG(1 BFu7i_BFu1i_Ip) C1{ Fi:7 Fi:1 Fp}



static void Test_BFu7i_BFu1i_Ip()
{
  {
    init_simple_test("BFu7i_BFu1i_Ip");
    static STRUCT_IF_C BFu7i_BFu1i_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu1i_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1i_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_Ip, BFu7i_BFu1i_Ip)
//============================================================================


struct  BFu7i_BFu1i_L  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu1i_L) C1{ Fi:7 Fi:1 FL}



static void Test_BFu7i_BFu1i_L()
{
  {
    init_simple_test("BFu7i_BFu1i_L");
    static STRUCT_IF_C BFu7i_BFu1i_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1i_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1i_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_L, BFu7i_BFu1i_L)
//============================================================================


struct  BFu7i_BFu1i_S  {
  unsigned int v1:7;
  unsigned int v2:1;
  short v3;
};
//SIG(1 BFu7i_BFu1i_S) C1{ Fi:7 Fi:1 Fs}



static void Test_BFu7i_BFu1i_S()
{
  {
    init_simple_test("BFu7i_BFu1i_S");
    static STRUCT_IF_C BFu7i_BFu1i_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu1i_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_S, BFu7i_BFu1i_S)
//============================================================================


struct  BFu7i_BFu1i_Uc  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu1i_Uc) C1{ Fi:7 Fi:1 Fc}



static void Test_BFu7i_BFu1i_Uc()
{
  {
    init_simple_test("BFu7i_BFu1i_Uc");
    static STRUCT_IF_C BFu7i_BFu1i_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_Uc");
    check_field_offset(lv, v3, 1, "BFu7i_BFu1i_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_Uc, BFu7i_BFu1i_Uc)
//============================================================================


struct  BFu7i_BFu1i_Ui  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu1i_Ui) C1{ Fi:7 Fi:1 Fi}



static void Test_BFu7i_BFu1i_Ui()
{
  {
    init_simple_test("BFu7i_BFu1i_Ui");
    static STRUCT_IF_C BFu7i_BFu1i_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1i_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1i_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_Ui, BFu7i_BFu1i_Ui)
//============================================================================


struct  BFu7i_BFu1i_Ul  {
  unsigned int v1:7;
  unsigned int v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu1i_Ul) C1{ Fi:7 Fi:1 FL}



static void Test_BFu7i_BFu1i_Ul()
{
  {
    init_simple_test("BFu7i_BFu1i_Ul");
    static STRUCT_IF_C BFu7i_BFu1i_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1i_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1i_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_Ul, BFu7i_BFu1i_Ul)
//============================================================================


struct  BFu7i_BFu1i_Us  {
  unsigned int v1:7;
  unsigned int v2:1;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu1i_Us) C1{ Fi:7 Fi:1 Fs}



static void Test_BFu7i_BFu1i_Us()
{
  {
    init_simple_test("BFu7i_BFu1i_Us");
    static STRUCT_IF_C BFu7i_BFu1i_Us lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1i_Us)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1i_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu1i_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_Us, BFu7i_BFu1i_Us)
//============================================================================


struct  BFu7i_BFu1i_Vp  {
  unsigned int v1:7;
  unsigned int v2:1;
  void *v3;
};
//SIG(1 BFu7i_BFu1i_Vp) C1{ Fi:7 Fi:1 Fp}



static void Test_BFu7i_BFu1i_Vp()
{
  {
    init_simple_test("BFu7i_BFu1i_Vp");
    static STRUCT_IF_C BFu7i_BFu1i_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu1i_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1i_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1i_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1i_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1i_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1i_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1i_Vp, BFu7i_BFu1i_Vp)
//============================================================================


struct  BFu7i_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
};
//SIG(1 BFu7i_BFu1ll) C1{ Fi:7 FL:1}



static void Test_BFu7i_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll, BFu7i_BFu1ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu15i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu1ll_BFu15i) C1{ Fi:7 FL:1 Fi:15}



static void Test_BFu7i_BFu1ll_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu15i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu15i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu15i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7i_BFu1ll_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1ll_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu15i, BFu7i_BFu1ll_BFu15i)
//============================================================================


struct  BFu7i_BFu1ll_BFu15ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu1ll_BFu15ll) C1{ Fi:7 FL:1 FL:15}



static void Test_BFu7i_BFu1ll_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7i_BFu1ll_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1ll_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu15ll, BFu7i_BFu1ll_BFu15ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu15s  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu1ll_BFu15s) C1{ Fi:7 FL:1 Fs:15}



static void Test_BFu7i_BFu1ll_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu15s");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu15s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu15s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu1ll_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1ll_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu15s, BFu7i_BFu1ll_BFu15s)
//============================================================================


struct  BFu7i_BFu1ll_BFu16i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu1ll_BFu16i) C1{ Fi:7 FL:1 Fi:16}



static void Test_BFu7i_BFu1ll_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu16i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu16i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu16i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7i_BFu1ll_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1ll_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu16i, BFu7i_BFu1ll_BFu16i)
//============================================================================


struct  BFu7i_BFu1ll_BFu16ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu1ll_BFu16ll) C1{ Fi:7 FL:1 FL:16}



static void Test_BFu7i_BFu1ll_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7i_BFu1ll_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1ll_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu16ll, BFu7i_BFu1ll_BFu16ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu16s  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu1ll_BFu16s) C1{ Fi:7 FL:1 Fs:16}



static void Test_BFu7i_BFu1ll_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu16s");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu16s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu16s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu1ll_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1ll_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu16s, BFu7i_BFu1ll_BFu16s)
//============================================================================


struct  BFu7i_BFu1ll_BFu17i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu1ll_BFu17i) C1{ Fi:7 FL:1 Fi:17}



static void Test_BFu7i_BFu1ll_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu17i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu17i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu17i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7i_BFu1ll_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu1ll_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu17i, BFu7i_BFu1ll_BFu17i)
//============================================================================


struct  BFu7i_BFu1ll_BFu17ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu1ll_BFu17ll) C1{ Fi:7 FL:1 FL:17}



static void Test_BFu7i_BFu1ll_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7i_BFu1ll_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu1ll_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu17ll, BFu7i_BFu1ll_BFu17ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu1c  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu1ll_BFu1c) C1{ Fi:7 FL:1 Fc:1}



static void Test_BFu7i_BFu1ll_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu1c");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu1c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu1c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1ll_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu1c, BFu7i_BFu1ll_BFu1c)
//============================================================================


struct  BFu7i_BFu1ll_BFu1i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu1ll_BFu1i) C1{ Fi:7 FL:1 Fi:1}



static void Test_BFu7i_BFu1ll_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu1i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu1i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu1i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1ll_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu1i, BFu7i_BFu1ll_BFu1i)
//============================================================================


struct  BFu7i_BFu1ll_BFu1ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu1ll_BFu1ll) C1{ Fi:7 FL:1 FL:1}



static void Test_BFu7i_BFu1ll_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1ll_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu1ll, BFu7i_BFu1ll_BFu1ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu1s  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu1ll_BFu1s) C1{ Fi:7 FL:1 Fs:1}



static void Test_BFu7i_BFu1ll_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu1s");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu1s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu1s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1ll_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu1s, BFu7i_BFu1ll_BFu1s)
//============================================================================


struct  BFu7i_BFu1ll_BFu31i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu1ll_BFu31i) C1{ Fi:7 FL:1 Fi:31}



static void Test_BFu7i_BFu1ll_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu31i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1ll_BFu31i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu1ll_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu1ll_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu31i, BFu7i_BFu1ll_BFu31i)
//============================================================================


struct  BFu7i_BFu1ll_BFu31ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu1ll_BFu31ll) C1{ Fi:7 FL:1 FL:31}



static void Test_BFu7i_BFu1ll_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1ll_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7i_BFu1ll_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu1ll_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu31ll, BFu7i_BFu1ll_BFu31ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu32i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu1ll_BFu32i) C1{ Fi:7 FL:1 Fi:32}



static void Test_BFu7i_BFu1ll_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu32i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1ll_BFu32i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu1ll_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu1ll_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu32i, BFu7i_BFu1ll_BFu32i)
//============================================================================


struct  BFu7i_BFu1ll_BFu32ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu1ll_BFu32ll) C1{ Fi:7 FL:1 FL:32}



static void Test_BFu7i_BFu1ll_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1ll_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7i_BFu1ll_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu1ll_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu32ll, BFu7i_BFu1ll_BFu32ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu33  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu1ll_BFu33) C1{ Fi:7 FL:1 FL:33}



static void Test_BFu7i_BFu1ll_BFu33()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu33");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1ll_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7i_BFu1ll_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu1ll_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu33, BFu7i_BFu1ll_BFu33)
//============================================================================


struct  BFu7i_BFu1ll_BFu7c  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu1ll_BFu7c) C1{ Fi:7 FL:1 Fc:7}



static void Test_BFu7i_BFu1ll_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu7c");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu7c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu7c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1ll_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu7c, BFu7i_BFu1ll_BFu7c)
//============================================================================


struct  BFu7i_BFu1ll_BFu7i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu1ll_BFu7i) C1{ Fi:7 FL:1 Fi:7}



static void Test_BFu7i_BFu1ll_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu7i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu7i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu7i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1ll_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu7i, BFu7i_BFu1ll_BFu7i)
//============================================================================


struct  BFu7i_BFu1ll_BFu7ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu1ll_BFu7ll) C1{ Fi:7 FL:1 FL:7}



static void Test_BFu7i_BFu1ll_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1ll_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu7ll, BFu7i_BFu1ll_BFu7ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu7s  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu1ll_BFu7s) C1{ Fi:7 FL:1 Fs:7}



static void Test_BFu7i_BFu1ll_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu7s");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu7s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu7s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1ll_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu7s, BFu7i_BFu1ll_BFu7s)
//============================================================================


struct  BFu7i_BFu1ll_BFu8c  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu1ll_BFu8c) C1{ Fi:7 FL:1 Fc:8}



static void Test_BFu7i_BFu1ll_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu8c");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu8c lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu8c)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1ll_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1ll_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu8c, BFu7i_BFu1ll_BFu8c)
//============================================================================


struct  BFu7i_BFu1ll_BFu8i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu1ll_BFu8i) C1{ Fi:7 FL:1 Fi:8}



static void Test_BFu7i_BFu1ll_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu8i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu8i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu8i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1ll_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1ll_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu8i, BFu7i_BFu1ll_BFu8i)
//============================================================================


struct  BFu7i_BFu1ll_BFu8ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu1ll_BFu8ll) C1{ Fi:7 FL:1 FL:8}



static void Test_BFu7i_BFu1ll_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1ll_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1ll_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu8ll, BFu7i_BFu1ll_BFu8ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu8s  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu1ll_BFu8s) C1{ Fi:7 FL:1 Fs:8}



static void Test_BFu7i_BFu1ll_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu8s");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu8s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu8s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1ll_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1ll_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu8s, BFu7i_BFu1ll_BFu8s)
//============================================================================


struct  BFu7i_BFu1ll_BFu9i  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu1ll_BFu9i) C1{ Fi:7 FL:1 Fi:9}



static void Test_BFu7i_BFu1ll_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu9i");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu9i lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu9i)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7i_BFu1ll_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1ll_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu9i, BFu7i_BFu1ll_BFu9i)
//============================================================================


struct  BFu7i_BFu1ll_BFu9ll  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu1ll_BFu9ll) C1{ Fi:7 FL:1 FL:9}



static void Test_BFu7i_BFu1ll_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7i_BFu1ll_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1ll_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu9ll, BFu7i_BFu1ll_BFu9ll)
//============================================================================


struct  BFu7i_BFu1ll_BFu9s  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu1ll_BFu9s) C1{ Fi:7 FL:1 Fs:9}



static void Test_BFu7i_BFu1ll_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu1ll_BFu9s");
    static STRUCT_IF_C BFu7i_BFu1ll_BFu9s lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_BFu9s)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu1ll_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1ll_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_BFu9s, BFu7i_BFu1ll_BFu9s)
//============================================================================


struct  BFu7i_BFu1ll_C  {
  unsigned int v1:7;
  __tsu64 v2:1;
  char v3;
};
//SIG(1 BFu7i_BFu1ll_C) C1{ Fi:7 FL:1 Fc}



static void Test_BFu7i_BFu1ll_C()
{
  {
    init_simple_test("BFu7i_BFu1ll_C");
    static STRUCT_IF_C BFu7i_BFu1ll_C lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_C)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_C");
    check_field_offset(lv, v3, 1, "BFu7i_BFu1ll_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_C, BFu7i_BFu1ll_C)
//============================================================================


struct  BFu7i_BFu1ll_D  {
  unsigned int v1:7;
  __tsu64 v2:1;
  double v3;
};
//SIG(1 BFu7i_BFu1ll_D) C1{ Fi:7 FL:1 FL}



static void Test_BFu7i_BFu1ll_D()
{
  {
    init_simple_test("BFu7i_BFu1ll_D");
    static STRUCT_IF_C BFu7i_BFu1ll_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1ll_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1ll_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_D, BFu7i_BFu1ll_D)
//============================================================================


struct  BFu7i_BFu1ll_F  {
  unsigned int v1:7;
  __tsu64 v2:1;
  float v3;
};
//SIG(1 BFu7i_BFu1ll_F) C1{ Fi:7 FL:1 Fi}



static void Test_BFu7i_BFu1ll_F()
{
  {
    init_simple_test("BFu7i_BFu1ll_F");
    static STRUCT_IF_C BFu7i_BFu1ll_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1ll_F)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1ll_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_F, BFu7i_BFu1ll_F)
//============================================================================


struct  BFu7i_BFu1ll_I  {
  unsigned int v1:7;
  __tsu64 v2:1;
  int v3;
};
//SIG(1 BFu7i_BFu1ll_I) C1{ Fi:7 FL:1 Fi}



static void Test_BFu7i_BFu1ll_I()
{
  {
    init_simple_test("BFu7i_BFu1ll_I");
    static STRUCT_IF_C BFu7i_BFu1ll_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1ll_I)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1ll_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_I, BFu7i_BFu1ll_I)
//============================================================================


struct  BFu7i_BFu1ll_Ip  {
  unsigned int v1:7;
  __tsu64 v2:1;
  int *v3;
};
//SIG(1 BFu7i_BFu1ll_Ip) C1{ Fi:7 FL:1 Fp}



static void Test_BFu7i_BFu1ll_Ip()
{
  {
    init_simple_test("BFu7i_BFu1ll_Ip");
    static STRUCT_IF_C BFu7i_BFu1ll_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu1ll_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1ll_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_Ip, BFu7i_BFu1ll_Ip)
//============================================================================


struct  BFu7i_BFu1ll_L  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu1ll_L) C1{ Fi:7 FL:1 FL}



static void Test_BFu7i_BFu1ll_L()
{
  {
    init_simple_test("BFu7i_BFu1ll_L");
    static STRUCT_IF_C BFu7i_BFu1ll_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1ll_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1ll_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_L, BFu7i_BFu1ll_L)
//============================================================================


struct  BFu7i_BFu1ll_S  {
  unsigned int v1:7;
  __tsu64 v2:1;
  short v3;
};
//SIG(1 BFu7i_BFu1ll_S) C1{ Fi:7 FL:1 Fs}



static void Test_BFu7i_BFu1ll_S()
{
  {
    init_simple_test("BFu7i_BFu1ll_S");
    static STRUCT_IF_C BFu7i_BFu1ll_S lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_S)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu1ll_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_S, BFu7i_BFu1ll_S)
//============================================================================


struct  BFu7i_BFu1ll_Uc  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu1ll_Uc) C1{ Fi:7 FL:1 Fc}



static void Test_BFu7i_BFu1ll_Uc()
{
  {
    init_simple_test("BFu7i_BFu1ll_Uc");
    static STRUCT_IF_C BFu7i_BFu1ll_Uc lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_Uc)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_Uc");
    check_field_offset(lv, v3, 1, "BFu7i_BFu1ll_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_Uc, BFu7i_BFu1ll_Uc)
//============================================================================


struct  BFu7i_BFu1ll_Ui  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu1ll_Ui) C1{ Fi:7 FL:1 Fi}



static void Test_BFu7i_BFu1ll_Ui()
{
  {
    init_simple_test("BFu7i_BFu1ll_Ui");
    static STRUCT_IF_C BFu7i_BFu1ll_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1ll_Ui)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1ll_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_Ui, BFu7i_BFu1ll_Ui)
//============================================================================


struct  BFu7i_BFu1ll_Ul  {
  unsigned int v1:7;
  __tsu64 v2:1;
  __tsu64 v3;
};
//SIG(1 BFu7i_BFu1ll_Ul) C1{ Fi:7 FL:1 FL}



static void Test_BFu7i_BFu1ll_Ul()
{
  {
    init_simple_test("BFu7i_BFu1ll_Ul");
    static STRUCT_IF_C BFu7i_BFu1ll_Ul lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1ll_Ul)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_Ul)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_Ul");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_Ul");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_Ul");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1ll_Ul.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_Ul, BFu7i_BFu1ll_Ul)
//============================================================================


struct  BFu7i_BFu1ll_Us  {
  unsigned int v1:7;
  __tsu64 v2:1;
  unsigned short v3;
};
//SIG(1 BFu7i_BFu1ll_Us) C1{ Fi:7 FL:1 Fs}



static void Test_BFu7i_BFu1ll_Us()
{
  {
    init_simple_test("BFu7i_BFu1ll_Us");
    static STRUCT_IF_C BFu7i_BFu1ll_Us lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1ll_Us)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_Us)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_Us");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_Us");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_Us");
    check_field_offset(lv, v3, 2, "BFu7i_BFu1ll_Us.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_Us, BFu7i_BFu1ll_Us)
//============================================================================


struct  BFu7i_BFu1ll_Vp  {
  unsigned int v1:7;
  __tsu64 v2:1;
  void *v3;
};
//SIG(1 BFu7i_BFu1ll_Vp) C1{ Fi:7 FL:1 Fp}



static void Test_BFu7i_BFu1ll_Vp()
{
  {
    init_simple_test("BFu7i_BFu1ll_Vp");
    static STRUCT_IF_C BFu7i_BFu1ll_Vp lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu1ll_Vp)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1ll_Vp)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1ll_Vp");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1ll_Vp");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1ll_Vp");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1ll_Vp.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1ll_Vp, BFu7i_BFu1ll_Vp)
//============================================================================


struct  BFu7i_BFu1s  {
  unsigned int v1:7;
  unsigned short v2:1;
};
//SIG(1 BFu7i_BFu1s) C1{ Fi:7 Fs:1}



static void Test_BFu7i_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu1s");
    static STRUCT_IF_C BFu7i_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s, BFu7i_BFu1s)
//============================================================================


struct  BFu7i_BFu1s_BFu15i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:15;
};
//SIG(1 BFu7i_BFu1s_BFu15i) C1{ Fi:7 Fs:1 Fi:15}



static void Test_BFu7i_BFu1s_BFu15i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu15i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu15i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu15i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu15i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu15i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu15i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7i_BFu1s_BFu15i");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1s_BFu15i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu15i, BFu7i_BFu1s_BFu15i)
//============================================================================


struct  BFu7i_BFu1s_BFu15ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:15;
};
//SIG(1 BFu7i_BFu1s_BFu15ll) C1{ Fi:7 Fs:1 FL:15}



static void Test_BFu7i_BFu1s_BFu15ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu15ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu15ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1s_BFu15ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu15ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, 1, "BFu7i_BFu1s_BFu15ll");
    set_bf_and_test(lv, v3, 1, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1s_BFu15ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu15ll, BFu7i_BFu1s_BFu15ll)
//============================================================================


struct  BFu7i_BFu1s_BFu15s  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned short v3:15;
};
//SIG(1 BFu7i_BFu1s_BFu15s) C1{ Fi:7 Fs:1 Fs:15}



static void Test_BFu7i_BFu1s_BFu15s()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu15s");
    static STRUCT_IF_C BFu7i_BFu1s_BFu15s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu15s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu15s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu15s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu15s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, 1, "BFu7i_BFu1s_BFu15s");
    set_bf_and_test(lv, v3, 2, 0, 15, hide_ull(1LL<<14), "BFu7i_BFu1s_BFu15s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu15s, BFu7i_BFu1s_BFu15s)
//============================================================================


struct  BFu7i_BFu1s_BFu16i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:16;
};
//SIG(1 BFu7i_BFu1s_BFu16i) C1{ Fi:7 Fs:1 Fi:16}



static void Test_BFu7i_BFu1s_BFu16i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu16i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu16i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu16i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu16i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu16i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu16i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7i_BFu1s_BFu16i");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1s_BFu16i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu16i, BFu7i_BFu1s_BFu16i)
//============================================================================


struct  BFu7i_BFu1s_BFu16ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:16;
};
//SIG(1 BFu7i_BFu1s_BFu16ll) C1{ Fi:7 Fs:1 FL:16}



static void Test_BFu7i_BFu1s_BFu16ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu16ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu16ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1s_BFu16ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu16ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, 1, "BFu7i_BFu1s_BFu16ll");
    set_bf_and_test(lv, v3, 1, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1s_BFu16ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu16ll, BFu7i_BFu1s_BFu16ll)
//============================================================================


struct  BFu7i_BFu1s_BFu16s  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned short v3:16;
};
//SIG(1 BFu7i_BFu1s_BFu16s) C1{ Fi:7 Fs:1 Fs:16}



static void Test_BFu7i_BFu1s_BFu16s()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu16s");
    static STRUCT_IF_C BFu7i_BFu1s_BFu16s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu16s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu16s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu16s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu16s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, 1, "BFu7i_BFu1s_BFu16s");
    set_bf_and_test(lv, v3, 2, 0, 16, hide_ull(1LL<<15), "BFu7i_BFu1s_BFu16s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu16s, BFu7i_BFu1s_BFu16s)
//============================================================================


struct  BFu7i_BFu1s_BFu17i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:17;
};
//SIG(1 BFu7i_BFu1s_BFu17i) C1{ Fi:7 Fs:1 Fi:17}



static void Test_BFu7i_BFu1s_BFu17i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu17i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu17i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu17i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu17i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu17i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu17i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7i_BFu1s_BFu17i");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu1s_BFu17i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu17i, BFu7i_BFu1s_BFu17i)
//============================================================================


struct  BFu7i_BFu1s_BFu17ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:17;
};
//SIG(1 BFu7i_BFu1s_BFu17ll) C1{ Fi:7 Fs:1 FL:17}



static void Test_BFu7i_BFu1s_BFu17ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu17ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu17ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1s_BFu17ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu17ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, 1, "BFu7i_BFu1s_BFu17ll");
    set_bf_and_test(lv, v3, 1, 0, 17, hide_ull(1LL<<16), "BFu7i_BFu1s_BFu17ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu17ll, BFu7i_BFu1s_BFu17ll)
//============================================================================


struct  BFu7i_BFu1s_BFu1c  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned char v3:1;
};
//SIG(1 BFu7i_BFu1s_BFu1c) C1{ Fi:7 Fs:1 Fc:1}



static void Test_BFu7i_BFu1s_BFu1c()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu1c");
    static STRUCT_IF_C BFu7i_BFu1s_BFu1c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu1c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu1c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu1c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu1c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu1c");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1s_BFu1c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu1c, BFu7i_BFu1s_BFu1c)
//============================================================================


struct  BFu7i_BFu1s_BFu1i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:1;
};
//SIG(1 BFu7i_BFu1s_BFu1i) C1{ Fi:7 Fs:1 Fi:1}



static void Test_BFu7i_BFu1s_BFu1i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu1i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu1i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu1i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu1i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu1i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu1i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu1i");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1s_BFu1i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu1i, BFu7i_BFu1s_BFu1i)
//============================================================================


struct  BFu7i_BFu1s_BFu1ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:1;
};
//SIG(1 BFu7i_BFu1s_BFu1ll) C1{ Fi:7 Fs:1 FL:1}



static void Test_BFu7i_BFu1s_BFu1ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu1ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu1ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1s_BFu1ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu1ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu1ll");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1s_BFu1ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu1ll, BFu7i_BFu1s_BFu1ll)
//============================================================================


struct  BFu7i_BFu1s_BFu1s  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned short v3:1;
};
//SIG(1 BFu7i_BFu1s_BFu1s) C1{ Fi:7 Fs:1 Fs:1}



static void Test_BFu7i_BFu1s_BFu1s()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu1s");
    static STRUCT_IF_C BFu7i_BFu1s_BFu1s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu1s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu1s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu1s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu1s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu1s");
    set_bf_and_test(lv, v3, 1, 0, 1, 1, "BFu7i_BFu1s_BFu1s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu1s, BFu7i_BFu1s_BFu1s)
//============================================================================


struct  BFu7i_BFu1s_BFu31i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:31;
};
//SIG(1 BFu7i_BFu1s_BFu31i) C1{ Fi:7 Fs:1 Fi:31}



static void Test_BFu7i_BFu1s_BFu31i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu31i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu31i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1s_BFu31i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu31i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu31i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu31i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, 1, "BFu7i_BFu1s_BFu31i");
    set_bf_and_test(lv, v3, 4, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu1s_BFu31i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu31i, BFu7i_BFu1s_BFu31i)
//============================================================================


struct  BFu7i_BFu1s_BFu31ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:31;
};
//SIG(1 BFu7i_BFu1s_BFu31ll) C1{ Fi:7 Fs:1 FL:31}



static void Test_BFu7i_BFu1s_BFu31ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu31ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu31ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1s_BFu31ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu31ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, 1, "BFu7i_BFu1s_BFu31ll");
    set_bf_and_test(lv, v3, 1, 0, 31, hide_ull(1LL<<30), "BFu7i_BFu1s_BFu31ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu31ll, BFu7i_BFu1s_BFu31ll)
//============================================================================


struct  BFu7i_BFu1s_BFu32i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:32;
};
//SIG(1 BFu7i_BFu1s_BFu32i) C1{ Fi:7 Fs:1 Fi:32}



static void Test_BFu7i_BFu1s_BFu32i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu32i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu32i lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1s_BFu32i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu32i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu32i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu32i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, 1, "BFu7i_BFu1s_BFu32i");
    set_bf_and_test(lv, v3, 4, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu1s_BFu32i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu32i, BFu7i_BFu1s_BFu32i)
//============================================================================


struct  BFu7i_BFu1s_BFu32ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:32;
};
//SIG(1 BFu7i_BFu1s_BFu32ll) C1{ Fi:7 Fs:1 FL:32}



static void Test_BFu7i_BFu1s_BFu32ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu32ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu32ll lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1s_BFu32ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu32ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, 1, "BFu7i_BFu1s_BFu32ll");
    set_bf_and_test(lv, v3, 1, 0, 32, hide_ull(1LL<<31), "BFu7i_BFu1s_BFu32ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu32ll, BFu7i_BFu1s_BFu32ll)
//============================================================================


struct  BFu7i_BFu1s_BFu33  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:33;
};
//SIG(1 BFu7i_BFu1s_BFu33) C1{ Fi:7 Fs:1 FL:33}



static void Test_BFu7i_BFu1s_BFu33()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu33");
    static STRUCT_IF_C BFu7i_BFu1s_BFu33 lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1s_BFu33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu33)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu33");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu33");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, 1, "BFu7i_BFu1s_BFu33");
    set_bf_and_test(lv, v3, 1, 0, 33, hide_ull(1LL<<32), "BFu7i_BFu1s_BFu33");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu33, BFu7i_BFu1s_BFu33)
//============================================================================


struct  BFu7i_BFu1s_BFu7c  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned char v3:7;
};
//SIG(1 BFu7i_BFu1s_BFu7c) C1{ Fi:7 Fs:1 Fc:7}



static void Test_BFu7i_BFu1s_BFu7c()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu7c");
    static STRUCT_IF_C BFu7i_BFu1s_BFu7c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu7c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu7c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu7c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu7c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1s_BFu7c");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu7c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu7c, BFu7i_BFu1s_BFu7c)
//============================================================================


struct  BFu7i_BFu1s_BFu7i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:7;
};
//SIG(1 BFu7i_BFu1s_BFu7i) C1{ Fi:7 Fs:1 Fi:7}



static void Test_BFu7i_BFu1s_BFu7i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu7i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu7i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu7i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu7i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu7i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu7i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1s_BFu7i");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu7i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu7i, BFu7i_BFu1s_BFu7i)
//============================================================================


struct  BFu7i_BFu1s_BFu7ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:7;
};
//SIG(1 BFu7i_BFu1s_BFu7ll) C1{ Fi:7 Fs:1 FL:7}



static void Test_BFu7i_BFu1s_BFu7ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu7ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu7ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1s_BFu7ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu7ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1s_BFu7ll");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu7ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu7ll, BFu7i_BFu1s_BFu7ll)
//============================================================================


struct  BFu7i_BFu1s_BFu7s  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned short v3:7;
};
//SIG(1 BFu7i_BFu1s_BFu7s) C1{ Fi:7 Fs:1 Fs:7}



static void Test_BFu7i_BFu1s_BFu7s()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu7s");
    static STRUCT_IF_C BFu7i_BFu1s_BFu7s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu7s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu7s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu7s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu7s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, 1, "BFu7i_BFu1s_BFu7s");
    set_bf_and_test(lv, v3, 1, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu7s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu7s, BFu7i_BFu1s_BFu7s)
//============================================================================


struct  BFu7i_BFu1s_BFu8c  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned char v3:8;
};
//SIG(1 BFu7i_BFu1s_BFu8c) C1{ Fi:7 Fs:1 Fc:8}



static void Test_BFu7i_BFu1s_BFu8c()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu8c");
    static STRUCT_IF_C BFu7i_BFu1s_BFu8c lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu8c)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu8c)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu8c");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu8c");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1s_BFu8c");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1s_BFu8c");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu8c, BFu7i_BFu1s_BFu8c)
//============================================================================


struct  BFu7i_BFu1s_BFu8i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:8;
};
//SIG(1 BFu7i_BFu1s_BFu8i) C1{ Fi:7 Fs:1 Fi:8}



static void Test_BFu7i_BFu1s_BFu8i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu8i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu8i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu8i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu8i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu8i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu8i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1s_BFu8i");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1s_BFu8i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu8i, BFu7i_BFu1s_BFu8i)
//============================================================================


struct  BFu7i_BFu1s_BFu8ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:8;
};
//SIG(1 BFu7i_BFu1s_BFu8ll) C1{ Fi:7 Fs:1 FL:8}



static void Test_BFu7i_BFu1s_BFu8ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu8ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu8ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1s_BFu8ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu8ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1s_BFu8ll");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1s_BFu8ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu8ll, BFu7i_BFu1s_BFu8ll)
//============================================================================


struct  BFu7i_BFu1s_BFu8s  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned short v3:8;
};
//SIG(1 BFu7i_BFu1s_BFu8s) C1{ Fi:7 Fs:1 Fs:8}



static void Test_BFu7i_BFu1s_BFu8s()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu8s");
    static STRUCT_IF_C BFu7i_BFu1s_BFu8s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu8s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu8s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu8s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu8s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, 1, "BFu7i_BFu1s_BFu8s");
    set_bf_and_test(lv, v3, 1, 0, 8, hide_ull(1LL<<7), "BFu7i_BFu1s_BFu8s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu8s, BFu7i_BFu1s_BFu8s)
//============================================================================


struct  BFu7i_BFu1s_BFu9i  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3:9;
};
//SIG(1 BFu7i_BFu1s_BFu9i) C1{ Fi:7 Fs:1 Fi:9}



static void Test_BFu7i_BFu1s_BFu9i()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu9i");
    static STRUCT_IF_C BFu7i_BFu1s_BFu9i lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu9i)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu9i)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu9i");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu9i");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7i_BFu1s_BFu9i");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1s_BFu9i");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu9i, BFu7i_BFu1s_BFu9i)
//============================================================================


struct  BFu7i_BFu1s_BFu9ll  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsu64 v3:9;
};
//SIG(1 BFu7i_BFu1s_BFu9ll) C1{ Fi:7 Fs:1 FL:9}



static void Test_BFu7i_BFu1s_BFu9ll()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu9ll");
    static STRUCT_IF_C BFu7i_BFu1s_BFu9ll lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(BFu7i_BFu1s_BFu9ll)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_BFu9ll)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, 1, "BFu7i_BFu1s_BFu9ll");
    set_bf_and_test(lv, v3, 1, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1s_BFu9ll");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu9ll, BFu7i_BFu1s_BFu9ll)
//============================================================================


struct  BFu7i_BFu1s_BFu9s  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned short v3:9;
};
//SIG(1 BFu7i_BFu1s_BFu9s) C1{ Fi:7 Fs:1 Fs:9}



static void Test_BFu7i_BFu1s_BFu9s()
{
  {
    init_simple_test("BFu7i_BFu1s_BFu9s");
    static STRUCT_IF_C BFu7i_BFu1s_BFu9s lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_BFu9s)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_BFu9s)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_BFu9s");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_BFu9s");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, 1, "BFu7i_BFu1s_BFu9s");
    set_bf_and_test(lv, v3, 2, 0, 9, hide_ull(1LL<<8), "BFu7i_BFu1s_BFu9s");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_BFu9s, BFu7i_BFu1s_BFu9s)
//============================================================================


struct  BFu7i_BFu1s_C  {
  unsigned int v1:7;
  unsigned short v2:1;
  char v3;
};
//SIG(1 BFu7i_BFu1s_C) C1{ Fi:7 Fs:1 Fc}



static void Test_BFu7i_BFu1s_C()
{
  {
    init_simple_test("BFu7i_BFu1s_C");
    static STRUCT_IF_C BFu7i_BFu1s_C lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_C)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_C)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_C");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_C");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_C");
    check_field_offset(lv, v3, 1, "BFu7i_BFu1s_C.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_C, BFu7i_BFu1s_C)
//============================================================================


struct  BFu7i_BFu1s_D  {
  unsigned int v1:7;
  unsigned short v2:1;
  double v3;
};
//SIG(1 BFu7i_BFu1s_D) C1{ Fi:7 Fs:1 FL}



static void Test_BFu7i_BFu1s_D()
{
  {
    init_simple_test("BFu7i_BFu1s_D");
    static STRUCT_IF_C BFu7i_BFu1s_D lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1s_D)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_D)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_D");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_D");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_D");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1s_D.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_D, BFu7i_BFu1s_D)
//============================================================================


struct  BFu7i_BFu1s_F  {
  unsigned int v1:7;
  unsigned short v2:1;
  float v3;
};
//SIG(1 BFu7i_BFu1s_F) C1{ Fi:7 Fs:1 Fi}



static void Test_BFu7i_BFu1s_F()
{
  {
    init_simple_test("BFu7i_BFu1s_F");
    static STRUCT_IF_C BFu7i_BFu1s_F lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1s_F)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_F)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_F");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_F");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_F");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1s_F.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_F, BFu7i_BFu1s_F)
//============================================================================


struct  BFu7i_BFu1s_I  {
  unsigned int v1:7;
  unsigned short v2:1;
  int v3;
};
//SIG(1 BFu7i_BFu1s_I) C1{ Fi:7 Fs:1 Fi}



static void Test_BFu7i_BFu1s_I()
{
  {
    init_simple_test("BFu7i_BFu1s_I");
    static STRUCT_IF_C BFu7i_BFu1s_I lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1s_I)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_I)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_I");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_I");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_I");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1s_I.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_I, BFu7i_BFu1s_I)
//============================================================================


struct  BFu7i_BFu1s_Ip  {
  unsigned int v1:7;
  unsigned short v2:1;
  int *v3;
};
//SIG(1 BFu7i_BFu1s_Ip) C1{ Fi:7 Fs:1 Fp}



static void Test_BFu7i_BFu1s_Ip()
{
  {
    init_simple_test("BFu7i_BFu1s_Ip");
    static STRUCT_IF_C BFu7i_BFu1s_Ip lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(BFu7i_BFu1s_Ip)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_Ip)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_Ip");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_Ip");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_Ip");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1s_Ip.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_Ip, BFu7i_BFu1s_Ip)
//============================================================================


struct  BFu7i_BFu1s_L  {
  unsigned int v1:7;
  unsigned short v2:1;
  __tsi64 v3;
};
//SIG(1 BFu7i_BFu1s_L) C1{ Fi:7 Fs:1 FL}



static void Test_BFu7i_BFu1s_L()
{
  {
    init_simple_test("BFu7i_BFu1s_L");
    static STRUCT_IF_C BFu7i_BFu1s_L lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(BFu7i_BFu1s_L)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(BFu7i_BFu1s_L)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_L");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_L");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_L");
    check_field_offset(lv, v3, ABISELECT(8,4), "BFu7i_BFu1s_L.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_L, BFu7i_BFu1s_L)
//============================================================================


struct  BFu7i_BFu1s_S  {
  unsigned int v1:7;
  unsigned short v2:1;
  short v3;
};
//SIG(1 BFu7i_BFu1s_S) C1{ Fi:7 Fs:1 Fs}



static void Test_BFu7i_BFu1s_S()
{
  {
    init_simple_test("BFu7i_BFu1s_S");
    static STRUCT_IF_C BFu7i_BFu1s_S lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_S)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_S)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_S");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_S");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_S");
    check_field_offset(lv, v3, 2, "BFu7i_BFu1s_S.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_S, BFu7i_BFu1s_S)
//============================================================================


struct  BFu7i_BFu1s_Uc  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned char v3;
};
//SIG(1 BFu7i_BFu1s_Uc) C1{ Fi:7 Fs:1 Fc}



static void Test_BFu7i_BFu1s_Uc()
{
  {
    init_simple_test("BFu7i_BFu1s_Uc");
    static STRUCT_IF_C BFu7i_BFu1s_Uc lv;
    check2(sizeof(lv), 4, "sizeof(BFu7i_BFu1s_Uc)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_Uc)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_Uc");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_Uc");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_Uc");
    check_field_offset(lv, v3, 1, "BFu7i_BFu1s_Uc.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_Uc, BFu7i_BFu1s_Uc)
//============================================================================


struct  BFu7i_BFu1s_Ui  {
  unsigned int v1:7;
  unsigned short v2:1;
  unsigned int v3;
};
//SIG(1 BFu7i_BFu1s_Ui) C1{ Fi:7 Fs:1 Fi}



static void Test_BFu7i_BFu1s_Ui()
{
  {
    init_simple_test("BFu7i_BFu1s_Ui");
    static STRUCT_IF_C BFu7i_BFu1s_Ui lv;
    check2(sizeof(lv), 8, "sizeof(BFu7i_BFu1s_Ui)");
    check2(__alignof__(lv), 4, "__alignof__(BFu7i_BFu1s_Ui)");
    set_bf_and_test(lv, v1, 0, 0, 7, 1, "BFu7i_BFu1s_Ui");
    set_bf_and_test(lv, v1, 0, 0, 7, hide_ull(1LL<<6), "BFu7i_BFu1s_Ui");
    set_bf_and_test(lv, v2, 0, 7, 1, 1, "BFu7i_BFu1s_Ui");
    check_field_offset(lv, v3, 4, "BFu7i_BFu1s_Ui.v3");
  }
}
ARRANGE_TO_CALL_ME(Test_BFu7i_BFu1s_Ui, BFu7i_BFu1s_Ui)
//============================================================================

